Anda di halaman 1dari 25

2010

PROCEDIMIENTOS ALMACENADOS Versin 2.0

IDAt INSTITUTO TECNOLGICO IDAT 14/10/2010

IDAT

HERRAMIENTAS DE PRODUCTIVIDAD II

CICLO II

PROCEDIMIENTOS ALMACENADOS
Son instrucciones precompilados de Transact-SQL almacenadas en una base de datos SQL Server y que ejecuta una serie de sentencias SQL cuando el procedimiento es invocado. SQL Server soporta cinco tipos de procedimientos almacenados: System Stored Procedure (sp_). Se almacena en la BD Master. Un procedimiento almacenado del sistema recupera informacin de las tablas del sistema. Ello le permitir realizar tareas de administracin de base de datos que actualiza las tablas del sistema. Local Stored Procedures. Los procedimientos almacenados locales son creados en las bases de datos de usuarios. Temporary Stored Procedures. Los procedimientos almacenados temporales pueden ser locales (con nombres que empiezan con # , disponibles slo dentro de la sesin del usuario) , o globales (con nombres que empiezan con ##, disponibles dentro de todas las sesiones). Remote Stored Procedure. Los procedimientos almacenados remotos se llaman de un servidor remoto o cliente que se conectan a un servidor diferente Extended Stored Proceder (xp_). Los procedimientos almacenados extendidos permiten la ejecucin de DLLs fuera del ambiente del SQL Server CREACIN DE LOS PROCEDIMIENTOS ALMACENADOS Procedimiento que no recibe ni devuelve parmetros Sintaxis: CREATE PROCEDURE nombre_procedimiento AS Sentencias_sql Procedimiento que recibe parmetros Sintaxis: CREATE PROCEDURE nombre_procedimiento @parmetro1 tipo_dato [=valor], @parmetro2 tipo_dato [=valor], @parmetro3 tipo_dato [=valor], ....... AS Sentencias_sql Procedimiento que recibe y entrega parmetros Sintaxis: CREATE PROCEDURE nombre_procedimiento @parmetro1 tipo_dato [=valor], @parmetro2 tipo_dato [=valor], @parmetro3 tipo_dato [=valor] OUTPUT, ....... AS Sentencias_sql Modificacin de un procedimiento almacenado

Pgina 1 de 24

Manual MS. SQL Server 2005 v 2.0

Profesor R. Schuller J.

IDAT

HERRAMIENTAS DE PRODUCTIVIDAD II

CICLO II

Sintaxis: ALTER PROCEDURE nombre_procedimiento [@parmetro1 tipo_dato [=valor], @parmetro2 tipo_dato [=valor], @parmetro3 tipo_dato [=valor] OUTPUT, .......] AS Sentencias_sql Eliminacin de un procedimiento almacenado Sintaxis: DROP PROCEDURE nombre_procedimiento EJECUCIN DE LOS PROCEDIMIENTOS ALMACENADOS Procedimiento que no recibe ni devuelve parmetros Sintaxis: CREATE PROCEDURE nombre_procedimiento AS Sentencias_sql GO EXECUTE nombre_procedimiento Procedimiento que recibe parmetros Sintaxis: CREATE PROCEDURE nombre_procedimiento @parmetro1 tipo_dato [=valor], @parmetro2 tipo_dato [=valor], @parmetro3 tipo_dato [=valor], ....... AS Sentencias_sql GO EXECUTE nombre_procedimiento parmetro1, parmetro2,...... Procedimiento que recibe y entrega parmetros Sintaxis: CREATE PROCEDURE nombre_procedimiento @parmetro1 tipo_dato [=valor], @parmetro2 tipo_dato [=valor], @parmetro3 tipo_dato [=valor] OUTPUT, ....... AS Sentencias_sql GO EXECUTE nombre_procedimiento parmetro1, @var_salida OUTPUT,....... GO

Pgina 2 de 24

Manual MS. SQL Server 2005 v 2.0

Profesor R. Schuller J.

IDAT

HERRAMIENTAS DE PRODUCTIVIDAD II

CICLO II

Ejecutar un procedimiento almacenado Cuando tenga que ejecutar un procedimiento almacenado, utilice la instruccin EXECUTE de Transact-SQL. Ejemplos: 1. Ejecuta procedimiento execute proc_lista 2. Visualiza nombre del procedimiento proc_lista, el propietario, tipo de objetos y fecha de creacion execute sp_help proc_lista 3. LISTA LAS SENTENCIAS DEL PROCEDIMIENTO execute sp_helptext promedio_final 4. VISUALIZA LOS PROCEDIMIENTOS ALMACENADOS execute sp_stored_procedures 5. VISUALIZA LAS DEPENDENIAS DEL OBJETO HACIA OTROS Y REFERENCIAS HACIA L execute sp_depends promedio_final

A CONTINUACIN EJERCICIOS:
/* Crea un procedimiento almacenado de nombre proc_lista que devuelve una lista de clientes de las ciudades de Londres y Madrid; luego ejecuta el procedimiento;*/ USE NORTHWIND if exists(select name from sysobjects where name='proc_lista' and type ='p') begin drop procedure proc_lista end go create procedure proc_lista AS select * from Customers where city = 'London' or city='Madrid' order by City go Use Northwind exec proc_lista go /*Luego modifica el procedimiento adicionando la ciudad de Berlin y ejecuta el procedimiento modificado */ Alter Procedure proc_lista AS select * from Customers Pgina 3 de 24 Manual MS. SQL Server 2005 v 2.0 Profesor R. Schuller J.

IDAT

HERRAMIENTAS DE PRODUCTIVIDAD II

CICLO II

where city = 'London' or city='Madrid' or city='Berlin' order by City go Use Northwind exec proc_lista go /* Se procede a visualizar todos los procedimientos almacenados que tiene la base de datos Northwind en en el objeto SYSOBJECTS */ use northwind select type, name, crdate from sysobjects where type='p' order by crdate desc /* Visualiza el nombre del procedimiento, el propietario, tipos de objetos y fecha de creacion */ exec sp_help /* visualiza nombre del procedimiento proc_lista, propietario, tipo de objetos y fecha de creacion */ exec sp_help proc_lista /* y luego elimina el procedimiento */ use northwind drop procedure proc_lista go /* Verifica si se elimin el procedimiento almacenado */ select type, name, crdate from sysobjects where type='p' order by crdate desc -- EJERCICIO Procedimiento que recibe parametros

if exists(select name from sysobjects where name='promedio_final' and type ='p') begin drop procedure promedio_final end go create procedure promedio_final @nota1 numeric, @nota2 numeric, @nota3 numeric, @nota4 numeric as select resultado=round(((@nota1 + @nota2 +@nota3*2 + @nota4*3)/7),0) go execute promedio_final 10,12,12,5 go execute promedio_final 1,2,10,20 go exec sp_help promedio_final Pgina 4 de 24 Manual MS. SQL Server 2005 v 2.0 Profesor R. Schuller J.

IDAT

HERRAMIENTAS DE PRODUCTIVIDAD II

CICLO II

drop procedure promedio_final -- EJERCICIO Procedimiento que recibe y entrega parmetros if exists(select name from sysobjects where name='promedio_final' and type ='p') begin drop procedure promedio_final end go create procedure promedio_final @nota1 numeric, @nota2 numeric, @nota3 numeric, @nota4 numeric, @resultado numeric output as set @resultado=round(((@nota1 + @nota2 +@nota3*2 + @nota4*3)/7),0) go declare @salida numeric execute promedio_final 10,12,12,5, @salida output select @salida as 'el promedio del alumno es ...' go /* lista las sentencias del procedimiento */ execute sp_helptext promedio_final /* visualiza los procedimientos almacenados */ execute sp_stored_procedures /* visualiza las dependencias del objeto hacia otros y referencias hacia l */ execute sp_depends promedio_final -- ------------------------------------------------------------

EJERCICIOS CON PROCEDIMIENTOS ALMACENADOS (SP):


-- EJERCICIO 01 /* crea un procedimiento, que para ejecutarse se enva, separadamente la cadena PAR para queliste los meses pares. El texto IMPAR, PARA LOS TEXTOS IMPARES, Y TODOS. */ set language spanish USE NORTHWIND if exists(select name from sysobjects where name='USP_LISTADOMESESVENTA' and type ='p') begin Pgina 5 de 24 Manual MS. SQL Server 2005 v 2.0 Profesor R. Schuller J.

IDAT

HERRAMIENTAS DE PRODUCTIVIDAD II

CICLO II

drop procedure USP_LISTADOMESESVENTA end go create proc usp_listadomesesventa @cad varchar(30) as if(@cad='par') begin select distinct datename(month,orderdate) as mes from orders where month(orderdate)%2=0 end else if(@cad='impar') begin select distinct datename(month,orderdate) as mes from orders where month(orderdate)%2=1 end else if(@cad='todos') begin select distinct datename(month,orderdate) as mes from orders end go EXEC USP_LISTADOMESESVENTA 'PAR' EXEC USP_LISTADOMESESVENTA 'IMPAR' EXEC USP_LISTADOMESESVENTA 'TODOS' ---- FIN EJERCICIO 01

-------------------------------------------------------------------- EJERCICIO 02 SET LANGUAGE US_ENGLISH USE NORTHWIND if exists(select name from sysobjects where name='USP_LISTADOEMPLEADOS_X_MES_VENTA' and type ='p') begin drop procedure USP_LISTADOEMPLEADOS_X_MES_VENTA end go create proc usp_listadoempleados_x_mes_venta @mes varchar(20) Pgina 6 de 24 Manual MS. SQL Server 2005 v 2.0 Profesor R. Schuller J.

IDAT

HERRAMIENTAS DE PRODUCTIVIDAD II

CICLO II

as select e.employeeid,lastname +space(1)+firstname as empleado ,e.title,count(o.orderid) as cantpedidos,sum(unitprice*quantity) as total from orders o,employees e,[order details]od where e.employeeid=o.employeeid and o.orderid=od.orderid and datename(month,orderdate)=@mes group by e.employeeid,lastname ,firstname,e.title order by e.employeeid asc go EXEC USP_LISTADOEMPLEADOS_X_MES_VENTA 'April' EXEC USP_LISTADOEMPLEADOS_X_MES_VENTA 'May' EXEC USP_LISTADOEMPLEADOS_X_MES_VENTA 'March'

-- FIN EJERCICIO 02 -------------------------------- EJERCICIO 03 USE NORTHWIND if exists(select name from sysobjects where name='USP_LISTADO_PEDIDOS_EMPLEADO_MES' and type ='p') begin drop procedure USP_LISTADO_PEDIDOS_EMPLEADO_MES end go create proc usp_listado_pedidos_empleado_mes @employeeid int, @mes varchar(30) as select o.orderid,companyname,unitprice,quantity, (unitprice*quantity) as total from customers c,orders o,[order details]od where c.customerid=o.customerid and o.orderid=od.orderid and employeeid=@employeeid and datename(month,orderdate)=@mes go EXEC USP_LISTADO_PEDIDOS_EMPLEADO_MES '1', 'March' EXEC USP_LISTADO_PEDIDOS_EMPLEADO_MES '2', 'March'

-- FIN EJERCICIO 03 ----------------------------------------------

Pgina 7 de 24

Manual MS. SQL Server 2005 v 2.0

Profesor R. Schuller J.

IDAT -- EJERCICIO 04

HERRAMIENTAS DE PRODUCTIVIDAD II

CICLO II

USE NORTHWIND if exists(select name from sysobjects where name='USP_REPORTE_PEDIDOS' and type ='p') begin drop procedure USP_REPORTE_PEDIDOS end go create proc usp_reporte_pedidos as select o.orderid,companyname,unitprice,quantity, (unitprice*quantity) as total, datename(month,orderdate) as mes ,e.employeeid,lastname +space(1)+firstname as empleado ,e.title from customers c,orders o,[order details]od,employees e where e.employeeid=o.employeeid and c.customerid=o.customerid and o.orderid=od.orderid go exec usp_reporte_pedidos -- FIN EJERCICIO 04 ---------------------------------- EJERCICIO 05 USE NORTHWIND if exists(select name from sysobjects where name='usp_selecionmultiple' and type ='p') begin drop procedure usp_selecionmultiple end go create proc usp_selecionmultiple @employeeid varchar(100), @mes varchar(30) as exec('select o.orderid,companyname,unitprice,quantity, (unitprice*quantity) as total from customers c,orders o,[order details]od where c.customerid=o.customerid and o.orderid=od.orderid Pgina 8 de 24 Manual MS. SQL Server 2005 v 2.0 Profesor R. Schuller J.

IDAT

HERRAMIENTAS DE PRODUCTIVIDAD II

CICLO II

and employeeid in ('+ @employeeid +') and datename(month,orderdate)=('+@mes+')') go usp_selecionmultiple "1","'april'"

-- OTRAS APLICACIONES CON PROCEDIMIENTOS ALMACENADOS ---------------------------------------- EJERCICIO 06 /* crea un procedimiento, que para ejecutarse se enva, separadamente la cadena PAR para queliste los meses pares. El texto IMPAR, PARA LOS TEXTOS IMPARES, Y TODOS. */ set language spanish

USE NORTHWIND if exists(select name from sysobjects where name='USP_LISTADOMESESVENTA' and type ='p') begin drop procedure USP_LISTADOMESESVENTA end go create proc usp_listadomesesventa @cad varchar(30) as if(@cad='par') begin select distinct datename(month,orderdate) as mes from orders where month(orderdate)%2=0 end else if(@cad='impar') begin select distinct datename(month,orderdate) as mes from orders where month(orderdate)%2=1 end else if(@cad='todos') begin select distinct datename(month,orderdate) as mes from orders end go exec usp_listadomesesventa 'par' exec usp_listadomesesventa 'impar' exec usp_listadomesesventa 'todos' Pgina 9 de 24 Manual MS. SQL Server 2005 v 2.0 Profesor R. Schuller J.

IDAT

HERRAMIENTAS DE PRODUCTIVIDAD II

CICLO II

---- FIN EJERCICIO 06 -------------------------------------------------------------------- EJERCICIO 07 SET LANGUAGE US_ENGLISH USE NORTHWIND if exists(select name from sysobjects where name='USP_LISTADOEMPLEADOS_X_MES_VENTA' and type ='p') begin drop procedure USP_LISTADOEMPLEADOS_X_MES_VENTA end go create proc usp_listadoempleados_x_mes_venta @mes varchar(20) as select e.employeeid,lastname +space(1)+firstname as empleado ,e.title,count(o.orderid) as cantpedidos,sum(unitprice*quantity) as total from orders o,employees e,[order details]od where e.employeeid=o.employeeid and o.orderid=od.orderid and datename(month,orderdate)=@mes group by e.employeeid,lastname ,firstname,e.title order by e.employeeid asc go EXEC USP_LISTADOEMPLEADOS_X_MES_VENTA 'April' EXEC USP_LISTADOEMPLEADOS_X_MES_VENTA 'May' EXEC USP_LISTADOEMPLEADOS_X_MES_VENTA 'March'

-- FIN EJERCICIO 07 -------------------------------- EJERCICIO 08 USE NORTHWIND if exists(select name from sysobjects where name='USP_LISTADO_PEDIDOS_EMPLEADO_MES' and type ='p') begin drop procedure USP_LISTADO_PEDIDOS_EMPLEADO_MES end go Pgina 10 de 24 Manual MS. SQL Server 2005 v 2.0 Profesor R. Schuller J.

IDAT

HERRAMIENTAS DE PRODUCTIVIDAD II

CICLO II

create proc usp_listado_pedidos_empleado_mes @employeeid int, @mes varchar(30) as select o.orderid,companyname,unitprice,quantity, (unitprice*quantity) as total from customers c,orders o,[order details]od where c.customerid=o.customerid and o.orderid=od.orderid and employeeid=@employeeid and datename(month,orderdate)=@mes go EXEC USP_LISTADO_PEDIDOS_EMPLEADO_MES '1', 'March' EXEC USP_LISTADO_PEDIDOS_EMPLEADO_MES '2', 'March'

-- FIN EJERCICIO 08 ----------------------------------------------- EJERCICIO 09 USE NORTHWIND if exists(select name from sysobjects where name='USP_REPORTE_PEDIDOS' and type ='p') begin drop procedure USP_REPORTE_PEDIDOS end go create proc usp_reporte_pedidos as select o.orderid,companyname,unitprice,quantity, (unitprice*quantity) as total, datename(month,orderdate) as mes ,e.employeeid,lastname +space(1)+firstname as empleado ,e.title from customers c,orders o,[order details]od,employees e where e.employeeid=o.employeeid and c.customerid=o.customerid and o.orderid=od.orderid GO EXEC USP_REPORTE_PEDIDOS -- FIN EJERCICIO 09 ---------------------------------- EJERCICIO 10 Pgina 11 de 24 Manual MS. SQL Server 2005 v 2.0 Profesor R. Schuller J.

IDAT

HERRAMIENTAS DE PRODUCTIVIDAD II

CICLO II

USE NORTHWIND if exists(select name from sysobjects where name='usp_selecionmultiple' and type ='p') begin drop procedure usp_selecionmultiple end go create proc usp_selecionmultiple @EMPLOYEEID varchar(100), @MES VARCHAR(30) as exec('select o.orderid,companyname,unitprice,quantity, (unitprice*quantity) as total from customers c,orders o,[order details]od where c.customerid=o.customerid and o.orderid=od.orderid and employeeid in ('+ @employeeid +') and datename(month,orderdate)=('+@mes+')') go usp_selecionmultiple "1","'April'" ------------------------------------- MS APLICACIONES CON PROCEDIMIENTOS ALMACENADOS --------------------------------------/* 11) Crear un SP que muestre las columnas del producto de mayor precio SI EL PROCEDIMIENTO EXISTE SE ELIMINA DE LA BD */ use northwind if exists(select name from sysobjects where type='p' and name='sp_mayor_precio') drop procedure sp_mayor_precio go create procedure sp_mayor_precio as select * from products where unitprice=(select max(unitprice) from products) go --ejecutar un procedimiento almacenado exec sp_mayor_precio go

Pgina 12 de 24

Manual MS. SQL Server 2005 v 2.0

Profesor R. Schuller J.

IDAT

HERRAMIENTAS DE PRODUCTIVIDAD II

CICLO II

--12) CREAR UN SP QUE RECIBA COMO PARAMETRO DE ENTRADA EL CODIGO --DE UN CLIENTE Y NOS MUESTRE LA FACTURAS QUE TIENE EL CLIENTE -------SOLO PARA ANALIZAR ESTE SP -----------------------------

/* La base de datos ficticia se llama BD_ARTICULOS, con las tablas CLIENTES y FAC_CABE y va a mostrar el nombre del cliente de latabla clientes, el numero de factura de la tabla fac_cabe, as como el total de dicha factura; slose veran los clientes que tienen su cabecera */ use bd_articulos if exists(select name from sysobjects where type='p' and name='sp_facturas') drop procedure sp_facturas go create procedure sp_facturas @cli_codigo char(5) as select clientes.cli_nombre, fac_cabe.fac_numero, fac_cabe.fac_total from clientes inner join fac_cabe on clientes.cli_codigo=fac_cabe.cli_codigo where clientes.cli_codigo=@cli_codigo go --ejecutar exec sp_facturas 'c0002' go --13) CREAR UN PROCEDIMIENTO QUE RECIBA EL NOMBRE DE UNA TABLA -- Y MUESTRE TODOS SUS REGISTROS

IF EXISTS(SELECT NAME FROM SYSOBJECTS WHERE NAME='SP_LISTAR_TABLA' AND TYPE ='P') DROP procedure SP_LISTAR_TABLA go create procedure sp_listar_tabla @tabla char(40) as execute('select * from ' +@tabla) go --ejecutar exec sp_listar_tabla 'dbo.employees' go exec sp_listar_tabla 'dbo.orders' go

Pgina 13 de 24

Manual MS. SQL Server 2005 v 2.0

Profesor R. Schuller J.

IDAT

HERRAMIENTAS DE PRODUCTIVIDAD II

CICLO II

--14 CREAR UN PROCEDIMIENTO QUE RETORNE UN VALOR OUTPUT, LA CANTIDAD -- DE PRODUCTOS CUYO PRECIO ES MAYOR O IGUAL A 40 if exists(select name from sysobjects where name='sp_cantidad' and type ='p') drop procedure sp_cantidad go create procedure sp_cantidad @cont int output as select @cont=count(*) from dbo.products where unitprice>=40 go --ejecutar el procedimiento almacenado declare @n int exec sp_cantidad @n output print convert(char(2),@n)+' productos con precios >= a 40' go ---EJERCICIO N 15 --PASANDO EL CODIGO DE UN CLIENTE MUESTRE EL IMPORTE --TOTAL DE FACTURA DE DICHO CLIENTE -------- ANALIZAR ESTE SP ----------------------------create procedure sp_total_clientes @codigo char(5) as select cli_codigo, sum(fac_total) as importe from fac_cabe where cli_codigo=@codigo group by cli_codigo go --ejecutar la consulta execute sp_total_clientes 'c0002' go execute sp_total_clientes 'c0003' go --EJERCICIO #16 AGREGA NUEVO ARTICULO -------- ANALIZAR ESTE SP ----------------------------create procedure sp_grabar_articulo @cod char(5), @nom varchar(40), @uni char(4), @pre numeric(10,2), @stk int Pgina 14 de 24 Manual MS. SQL Server 2005 v 2.0 Profesor R. Schuller J.

IDAT

HERRAMIENTAS DE PRODUCTIVIDAD II

CICLO II

as insert into articulos(art_codigo, art_nombre,art_unidad, art_precio,art_stock) values(@cod,@nom,@uni,@pre,@stk) go --ejecutar el procedimiento execute sp_grabar_articulo 'a0021','monitor samsung lcd','uni',650,80 select * from articulos go sp_helpdb bdfactura go -- 17 PASANDO UN AO MUESTRE LA CANTIDAD DE FACTURAS POR MES EN ESE AO -------- ANALIZAR ESTE SP ----------------------------create procedure sp_facturas_mes @anno int as select month(fac_fecha) as mes,count(fac_numero)as cantidad from fac_cabe where year(fac_fecha)=@anno group by month(fac_fecha) go execute sp_facturas_mes 2002 go ---------------- ---------------------------- MS EJERCICIOS USE MASTER IF EXISTS(SELECT * FROM SYSDATABASES WHERE NAME='BDALUMNOS') begin drop database BDALUMNOS end create database BDALUMNOS ---------------------use BDALUMNOS IF EXISTS(SELECT NAME FROM SYSOBJECTS WHERE NAME='factura' AND TYPE ='U') DROP table factura go create table factura (nrofac int not null constraint pkfac primary key, fecha datetime default getdate(), Pgina 15 de 24 Manual MS. SQL Server 2005 v 2.0 Profesor R. Schuller J.

IDAT

HERRAMIENTAS DE PRODUCTIVIDAD II

CICLO II

importe decimal(8,2) constraint ckcero check(importe >0), igv as importe*0.19 )--campo calculado alter table factura add total as importe + importe*0.19 exec sp_help factura ----------------------IF EXISTS(SELECT NAME FROM SYSOBJECTS WHERE NAME='articulos' AND TYPE ='U') DROP table articulos go create table articulos (codart numeric not null identity(555,5)) exec sp_help articulos ------------------------IF EXISTS(SELECT NAME FROM SYSOBJECTS WHERE NAME='distrito' AND TYPE ='U') DROP table distrito go create table distrito (coddis char(3) not null constraint pkdis primary key, nomdis varchar(30)) exec sp_help distrito -----------IF EXISTS(SELECT NAME FROM SYSOBJECTS WHERE NAME='alumno' AND TYPE ='U') DROP table alumno go create table alumno (nombre varchar(30)) alter table alumno add coddis char(3) ------alter table alumno add constraint fkdistrito foreign key (coddis) references distrito(coddis) Pgina 16 de 24 Manual MS. SQL Server 2005 v 2.0 Profesor R. Schuller J.

IDAT

HERRAMIENTAS DE PRODUCTIVIDAD II

CICLO II

alter table alumno drop constraint fkdistrito go alter table alumno drop column coddis --IF EXISTS(SELECT NAME FROM SYSOBJECTS WHERE NAME='carrera' AND TYPE ='U') DROP table carrera go create table carrera( codcar char(5)not null constraint pkcar primary key, nomcar varchar(20)) alter table alumno add codcar char(5) alter table alumno add constraint fkcarrera foreign key (codcar) references carrera(codcar)

USE master go IF EXISTS(SELECT * FROM sysdatabases WHERE name='BDFACTURA') begin DROP DATABASE BDFACTURA --GO end CREATE DATABASE BDFACTURA GO USE BDFACTURA GO -- Creacion de las Tablas IF EXISTS(SELECT NAME FROM SYSOBJECTS WHERE NAME='Articulos' AND TYPE ='U') DROP table Articulos CREATE TABLE Articulos ( art_codigo char (5) NOT NULL Primary key, art_nombre varchar (30) NULL , art_unidad char (4) NULL , Pgina 17 de 24 Manual MS. SQL Server 2005 v 2.0 Profesor R. Schuller J.

IDAT

HERRAMIENTAS DE PRODUCTIVIDAD II art_precio numeric(10, 2) NULL , art_stock int NULL )

CICLO II

GO IF EXISTS(SELECT NAME FROM SYSOBJECTS WHERE NAME='Clientes' AND TYPE ='U') DROP table Clientes CREATE TABLE Clientes ( cli_codigo char (5) NOT NULL Primary Key , cli_nombre varchar (25) NULL , cli_telefono int NULL , cli_ruc varchar(11) NULL , cli_direccion varchar (30) NULL ) GO IF EXISTS(SELECT NAME FROM SYSOBJECTS WHERE NAME='Vendedor' AND TYPE ='U') DROP table Vendedor CREATE TABLE Vendedor ( ven_cod char (5) NOT NULL Primary Key, ven_nom varchar (30) NULL , ven_fecha datetime NULL ) GO IF EXISTS(SELECT NAME FROM SYSOBJECTS WHERE NAME='Fac_Cabe' AND TYPE ='U') DROP table Fac_cabe CREATE TABLE Fac_cabe ( fac_numero char (12) NOT NULL Primary Key, fac_fecha datetime NULL , cli_codigo char (5) NULL foreign key(cli_codigo) references Clientes(cli_codigo), fac_igv char (1) NULL , fac_total money NULL , ven_cod char (5) NULL foreign key(ven_cod) references Vendedor(ven_cod) ) GO IF EXISTS(SELECT NAME FROM SYSOBJECTS WHERE NAME='Fac_deta' AND TYPE ='U') DROP table Fac_deta CREATE TABLE Fac_deta ( fac_numero char (12) NOT NULL foreign key(fac_numero) references Fac_cabe(fac_numero) , art_codigo char (5) NOT NULL, art_cantidad int NULL, --Primary Key (Fac_numero,art_codigo) ) GO

Pgina 18 de 24

Manual MS. SQL Server 2005 v 2.0

Profesor R. Schuller J.

IDAT

HERRAMIENTAS DE PRODUCTIVIDAD II

CICLO II

-- Ingreso de Data a las Tablas INSERT INTO clientes VALUES ('C0001','LAURA MORENO LEE ',1234567,54336725321,'Av. La Marina 1234') INSERT INTO clientes VALUES ('C0002','ALEJANDRO MORENO ',6584503,56325236234,'Av. Pardo 456 ') INSERT INTO clientes VALUES ('C0003','CLAUDIA LEE ',5674566,67836768957,'Av. Principal 123 ') INSERT INTO clientes VALUES ('C0004','CASTAEDA BLAS ',5524453,38532523450,'La Perla Callao') INSERT INTO clientes VALUES ('C0005','PERCY OBANDO ',6789453,34532523458,'Calle San Pedro 134') INSERT INTO clientes VALUES ('C0007','MIGUEL NARVA ',5678356,45622462572,'Jr. Naranjos 5689') INSERT INTO clientes VALUES ('C0008','CLAUDIO PARDO ',7894568,56632545357,'Av. Habich 543 ') INSERT INTO clientes VALUES ('C0009','MONICA GONZALES ',7894073,67233674566,'Av. Iquitos 228 ') INSERT INTO clientes VALUES ('C0011','JHON MORALES ',7685704,64223253459,'Calle Cueva 432 ') INSERT INTO clientes VALUES ('C0012','FERNANDO REDONDO ',6789456,24623325742,'Av. Javier Prado 114') INSERT INTO clientes VALUES ('C0013','GABRIELA ZAPATA ',5678466,72313254560,'Jr. Pio XII 112 ') INSERT INTO clientes VALUES ('C0014','MELISSA PAICO ',1189453,66325234580,'Lizardo Montero 340') INSERT INTO clientes VALUES ('C0015','SANDRA CAMPOS ',4563457,67362577361,'Jr. Dominico 554') INSERT INTO clientes VALUES ('C0016','MIGUEL RAMIREZ ',7460647,45632573556,'Jr. Salavery 876 ') INSERT INTO clientes VALUES ('C0018','RAUL MORIENTES ',8975783,65362533671,'Av. Habich 4567 ') INSERT INTO clientes VALUES ('C0019','EUGENIO CAMPOS ',9583569,54673356250,'Av. Wilson 678 ') INSERT INTO clientes VALUES ('C0020','LUCILA PARDO ',6546534,53476250977,'Av. Pardo 567 ') INSERT INTO clientes VALUES ('C0021','ROBERTO BAGGIO ',2678958,87662554325,'Av. Wilson 1267 ') go set dateformat dmy go INSERT vendedor VALUES('V0001','Eduardo Soto','10/05/1999') INSERT vendedor VALUES('V0002','Manuel Vivar','18/07/1999') INSERT vendedor VALUES('V0003','Pamela Gutierrez','05/02/2000') Pgina 19 de 24 Manual MS. SQL Server 2005 v 2.0 Profesor R. Schuller J.

IDAT

HERRAMIENTAS DE PRODUCTIVIDAD II

CICLO II

INSERT vendedor VALUES('V0004','Ketty Videna','12/10/2001') INSERT vendedor VALUES('V0005','Juan Del Carpio','01/01/2002') INSERT INTO articulos VALUES ('A0001','MOUSE GENIOUS ','UNI', 25,235) INSERT INTO articulos VALUES ('A0002','PENTIUM III 600 ','UNI',650,220) INSERT INTO articulos VALUES ('A0003','PENTIUM IV 1000 ','UNI',850,220) INSERT INTO articulos VALUES ('A0004','FUNDAS NAYLON ','MTS', 12, 35) INSERT INTO articulos VALUES ('A0005','MEMORIA ZIP 32 ','UNI', 60, 80) INSERT INTO articulos VALUES ('A0006','TINTA BJC21 B/N ','KG ', 28, 20) INSERT INTO articulos VALUES ('A0007','IMPRESORA EPSON 1234','UNI',170,120) INSERT INTO articulos VALUES ('A0008','MONITOR SYNMASTER 3N','UNI',180, 33) INSERT INTO articulos VALUES ('A0009','MONITOR VIEWSONIC ','UNI',220, 92) INSERT INTO articulos VALUES ('A0010','PENTIUM MMX 260 ','UNI',500, 97) INSERT INTO articulos VALUES ('A0011','MOUSE MICROSOFT ','UNI', 50,320) INSERT INTO articulos VALUES ('A0012','MEMORIA DIMM 64 ','UNI', 80, 25) INSERT INTO articulos VALUES ('A0014','IMPRESORA CANON 1000','UNI',205,200) INSERT INTO articulos VALUES ('A0016','TINTA BJC21 COLOR ','KG ', 25,120) INSERT INTO articulos VALUES ('A0019','TECLADO EPSON 102 ','UNI', 30,122) INSERT INTO articulos VALUES ('A0020','MOUSE LOGITECH ','UNI', 30,190) -- select * from fac_cabe INSERT INTO fac_cabe VALUES ('F0001','02/02/2000','C0007','S',560.00,'V0001') INSERT INTO fac_cabe VALUES ('F0002','03/04/2000','C0005','S',10808.00,'V0002') INSERT INTO fac_cabe VALUES ('F0003','03/05/2000','C0016','N',60.00,'V0002') INSERT INTO fac_cabe VALUES ('F0004','08/12/2000','C0002','S',510.00,'V0001') INSERT INTO fac_cabe VALUES ('F0005','08/06/2000','C0005','N',8291.00,'V0003') INSERT INTO fac_cabe VALUES ('F0006','09/12/2000','C0002','N',2210.00,'V0002') INSERT INTO fac_cabe VALUES ('F0007','10/09/2000','C0016','N',690.00,'V0003') INSERT INTO fac_cabe VALUES ('F0008','12/02/2000','C0005','S',60.00,'V0002') INSERT INTO fac_cabe VALUES ('F0009','12/11/2000','C0020','N',50.00,'V0003') INSERT INTO fac_cabe VALUES ('F0010','01/06/2001','C0005','N',894.00,'V0001') INSERT INTO fac_cabe VALUES ('F0011','01/07/2001','C0012','N',6908.00,'V0004') INSERT INTO fac_cabe VALUES ('F0012','01/11/2001','C0012','S',9100.00,'V0001') INSERT INTO fac_cabe VALUES ('F0013','02/10/2001','C0002','S',4305.00,'V0002') INSERT INTO fac_cabe VALUES ('F0014','02/01/2001','C0011','S',410.00,'V0003') INSERT INTO fac_cabe VALUES ('F0015','03/12/2001','C0018','N',510.00,'V0002') INSERT INTO fac_cabe VALUES ('F0016','03/03/2001','C0012','S',550.00,'V0001') INSERT INTO fac_cabe VALUES ('F0017','03/08/2001','C0001','N',446.00,'V0004') INSERT INTO fac_cabe VALUES ('F0018','03/01/2002','C0002','N',1053.00,'V0001') INSERT INTO fac_cabe VALUES ('F0019','11/01/2002','C0001','S',3556.00,'V0003') INSERT INTO fac_cabe VALUES ('F0020','05/01/2002','C0002','N',4320.00,'V0004') INSERT INTO fac_cabe VALUES ('F0021','07/01/2002','C0003','S',2954.00,'V0002') INSERT INTO fac_cabe VALUES ('F0022','12/02/2002','C0004','N',100.00,'V0002') INSERT INTO fac_cabe VALUES ('F0023','10/02/2002','C0005','S',4446.00,'V0003') INSERT INTO fac_cabe VALUES ('F0024','09/02/2002','C0004','N',14960.00,'V0004') INSERT INTO fac_cabe VALUES ('F0025','03/03/2002','C0005','S',1980.00,'V0001') Pgina 20 de 24 Manual MS. SQL Server 2005 v 2.0 Profesor R. Schuller J.

IDAT

HERRAMIENTAS DE PRODUCTIVIDAD II

CICLO II

INSERT INTO fac_cabe VALUES ('F0026','05/03/2002','C0004','N',2150.00,'V0003') INSERT INTO fac_cabe VALUES ('F0027','06/04/2002','C0004','N',764.00,'V0001') go

INSERT INTO fac_deta VALUES ('F0001','A0007', 3) INSERT INTO fac_deta VALUES ('F0001','A0001', 2) INSERT INTO fac_deta VALUES ('F0002','A0002',16) INSERT INTO fac_deta VALUES ('F0002','A0004', 4) INSERT INTO fac_deta VALUES ('F0002','A0005', 6) INSERT INTO fac_deta VALUES ('F0003','A0004', 5) INSERT INTO fac_deta VALUES ('F0004','A0007', 3) INSERT INTO fac_deta VALUES ('F0005','A0006',12) INSERT INTO fac_deta VALUES ('F0005','A0010',11) INSERT INTO fac_deta VALUES ('F0005','A0011', 4) INSERT INTO fac_deta VALUES ('F0005','A0014',11) INSERT INTO fac_deta VALUES ('F0006','A0007',13) INSERT INTO fac_deta VALUES ('F0007','A0020',23) INSERT INTO fac_deta VALUES ('F0008','A0020', 2) INSERT INTO fac_deta VALUES ('F0009','A0001', 2) INSERT INTO fac_deta VALUES ('F0010','A0006', 8) INSERT INTO fac_deta VALUES ('F0010','A0005', 7) INSERT INTO fac_deta VALUES ('F0010','A0011', 5) INSERT INTO fac_deta VALUES ('F0011','A0005', 6) INSERT INTO fac_deta VALUES ('F0011','A0004', 4) INSERT INTO fac_deta VALUES ('F0011','A0010',13) INSERT INTO fac_deta VALUES ('F0012','A0002',14) INSERT INTO fac_deta VALUES ('F0013','A0014',21) INSERT INTO fac_deta VALUES ('F0014','A0014', 2) INSERT INTO fac_deta VALUES ('F0015','A0007', 3) INSERT INTO fac_deta VALUES ('F0016','A0014', 2) INSERT INTO fac_deta VALUES ('F0016','A0006', 5) INSERT INTO fac_deta VALUES ('F0017','A0006', 7) INSERT INTO fac_deta VALUES ('F0017','A0011', 5) INSERT INTO fac_deta VALUES ('F0018','A0012', 4) INSERT INTO fac_deta VALUES ('F0018','A0001', 1) INSERT INTO fac_deta VALUES ('F0018','A0004', 4) INSERT INTO fac_deta VALUES ('F0018','A0005',11) INSERT INTO fac_deta VALUES ('F0019','A0008',13) INSERT INTO fac_deta VALUES ('F0019','A0007', 6) INSERT INTO fac_deta VALUES ('F0019','A0006', 7) INSERT INTO fac_deta VALUES ('F0020','A0007', 6) INSERT INTO fac_deta VALUES ('F0020','A0009',15) INSERT INTO fac_deta VALUES ('F0021','A0009',11) INSERT INTO fac_deta VALUES ('F0021','A0004', 2) Pgina 21 de 24 Manual MS. SQL Server 2005 v 2.0 Profesor R. Schuller J.

IDAT

HERRAMIENTAS DE PRODUCTIVIDAD II

CICLO II

INSERT INTO fac_deta VALUES ('F0021','A0007', 3) INSERT INTO fac_deta VALUES ('F0022','A0001', 4) INSERT INTO fac_deta VALUES ('F0023','A0003', 5) INSERT INTO fac_deta VALUES ('F0023','A0006', 7) INSERT INTO fac_deta VALUES ('F0024','A0007',13) INSERT INTO fac_deta VALUES ('F0024','A0003',15) INSERT INTO fac_deta VALUES ('F0025','A0008',11) INSERT INTO fac_deta VALUES ('F0026','A0010', 4) INSERT INTO fac_deta VALUES ('F0026','A0011', 3) INSERT INTO fac_deta VALUES ('F0027','A0007', 4) INSERT INTO fac_deta VALUES ('F0027','A0006', 3) go --Vamos agregar un campo estado a la tabla Clientes alter table clientes add estado int go --vamos a poner a todos los estados 1 de activo update clientes set estado=1 go --use bdfactura go ---Proc que Lista los clientes que Tienen Factura if exists(select * from sysobjects where name='Listado_Cliente' and type='P') drop procedure Listado_Cliente go create proc Listado_Cliente as select cli_codigo,cli_nombre from clientes where cli_codigo in (select cli_codigo from fac_cabe) go --Me va a listar las facturas del cliente seleccionado if exists(select * from sysobjects where name='Listado_facturas' and type='P') drop procedure Listado_facturas go create proc Listado_facturas @cod varchar(5) as select fac_numero,convert(char(10),fac_fecha,103) Fecha,fac_total from fac_cabe where cli_codigo=@cod go --Llamando al proc alm Pgina 22 de 24 Manual MS. SQL Server 2005 v 2.0 Profesor R. Schuller J.

IDAT

HERRAMIENTAS DE PRODUCTIVIDAD II

CICLO II

Listado_facturas 'C0001' go if exists(select * from sysobjects where name='Detalle' and type='P') drop proc Detalle go --vamos a habilitar el uso de las comillas set quoted_identifier off go create proc Detalle @fac varchar(255) as exec("select fac_numero,a.art_codigo,art_nombre,art_precio, art_cantidad, (art_precio*art_cantidad) Total from articulos as a,fac_deta as fd where a.art_codigo=fd.art_codigo and fac_numero in("+@fac+")") go

-- EJERCICIO DESARROLLAR EL SIGUIENTE SCRIPT USE MASTER IF EXISTS(SELECT * FROM SYSDATABASES WHERE NAME='BDALUMNOS') begin drop database BDALUMNOS end create database BDALUMNOS use BDALUMNOS IF EXISTS(SELECT NAME FROM SYSOBJECTS WHERE NAME='alumno' AND TYPE ='U') DROP table Alumno go create table alumno (codigo char(7)not null constraint pkAlumno primary key,nombres varchar(30),apellidos varchar(40), direccion varchar(50)) --listar la tabla creada exec sp_help alumno --Insertar campos(columna) a la tabla alumno alter table alumno add sexo char(1),telefono char(10),email varchar(50) go exec sp_help alumno ---adicionar Restriccion CHECK alter table alumno add constraint chksexo check(sexo='M' or sexo='F') --listar la restriccion exec sp_helpconstraint alumno Pgina 23 de 24 Manual MS. SQL Server 2005 v 2.0 Profesor R. Schuller J.

IDAT

HERRAMIENTAS DE PRODUCTIVIDAD II

CICLO II

--listar informacin sobre la base de datos exec sp_helpdb BDALUMNOS alter table alumno add EstadoCivil char(1) constraint chkEstadoCivil check (EstadoCivil='S'or EstadoCivil='C' or EstadoCivil='V' or EstadoCivil='D') exec sp_help alumno

--borrar una restriccion alter table alumno drop constraint chkEstadoCivil --borrar un campo alter table alumno drop column EstadoCivil

--adicionar un capmo y una restriccion alter table alumno add ecivil char(1) constraint chkcivil check(ecivil in ('S','C','V','D','K')) -- lista restricciones de tabla exec sp_helpconstraint alumno ---------------------------------------Restriccion DEFAULT alter table alumno add constraint dfnombre default 'Universitario' for nombres exec sp_helpconstraint alumno --Restriccion Unique alter table alumno add DNI char(8)constraint UQDni unique ---borrando de la tabla alumno la columna Email alter table alumno drop column Email

Pgina 24 de 24

Manual MS. SQL Server 2005 v 2.0

Profesor R. Schuller J.