You are on page 1of 25

2010

PROCEDIMIENTOS ALMACENADOS Versión 2.0

IDAt INSTITUTO TECNOLÓGICO 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 información de las tablas del sistema. Ello le permitirá realizar tareas de administración 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 sólo dentro de la sesión 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 ejecución de DLLs fuera del ambiente del SQL Server CREACIÓN DE LOS PROCEDIMIENTOS ALMACENADOS Procedimiento que no recibe ni devuelve parámetros Sintaxis: CREATE PROCEDURE nombre_procedimiento AS Sentencias_sql Procedimiento que recibe parámetros Sintaxis: CREATE PROCEDURE nombre_procedimiento @parámetro1 tipo_dato [=valor], @parámetro2 tipo_dato [=valor], @parámetro3 tipo_dato [=valor], ....... AS Sentencias_sql Procedimiento que recibe y entrega parámetros Sintaxis: CREATE PROCEDURE nombre_procedimiento @parámetro1 tipo_dato [=valor], @parámetro2 tipo_dato [=valor], @parámetro3 tipo_dato [=valor] OUTPUT, ....... AS Sentencias_sql Modificación de un procedimiento almacenado

Página 1 de 24

Manual MS. SQL Server 2005 v 2.0

Profesor R. Schuller J.

SQL Server 2005 v 2..........IDAT HERRAMIENTAS DE PRODUCTIVIDAD II CICLO II Sintaxis: ALTER PROCEDURE nombre_procedimiento [@parámetro1 tipo_dato [=valor]. @parámetro2 tipo_dato [=valor]... @parámetro2 tipo_dato [=valor]..... @parámetro3 tipo_dato [=valor] OUTPUT.. @parámetro3 tipo_dato [=valor] OUTPUT. @var_salida OUTPUT. ....... AS Sentencias_sql GO EXECUTE nombre_procedimiento parámetro1.... GO Página 2 de 24 Manual MS..0 Profesor R. Procedimiento que recibe y entrega parámetros Sintaxis: CREATE PROCEDURE nombre_procedimiento @parámetro1 tipo_dato [=valor]. parámetro2. .... @parámetro3 tipo_dato [=valor]. ... AS Sentencias_sql GO EXECUTE nombre_procedimiento parámetro1.] AS Sentencias_sql Eliminación de un procedimiento almacenado Sintaxis: DROP PROCEDURE nombre_procedimiento EJECUCIÓN DE LOS PROCEDIMIENTOS ALMACENADOS Procedimiento que no recibe ni devuelve parámetros Sintaxis: CREATE PROCEDURE nombre_procedimiento AS Sentencias_sql GO EXECUTE nombre_procedimiento Procedimiento que recibe parámetros Sintaxis: CREATE PROCEDURE nombre_procedimiento @parámetro1 tipo_dato [=valor]. . @parámetro2 tipo_dato [=valor]. Schuller J.

VISUALIZA LOS PROCEDIMIENTOS ALMACENADOS execute sp_stored_procedures 5. Schuller J.0 Profesor R. el propietario. SQL Server 2005 v 2. Ejecuta procedimiento execute proc_lista 2. VISUALIZA LAS DEPENDENIAS DEL OBJETO HACIA OTROS Y REFERENCIAS HACIA ÈL execute sp_depends promedio_final A CONTINUACIÒN EJERCICIOS: /* Crea un procedimiento almacenado de nombre proc_lista que devuelve una lista de clientes de las ciudades de Londres y Madrid. LISTA LAS SENTENCIAS DEL PROCEDIMIENTO execute sp_helptext promedio_final 4.IDAT HERRAMIENTAS DE PRODUCTIVIDAD II CICLO II Ejecutar un procedimiento almacenado Cuando tenga que ejecutar un procedimiento almacenado. 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 Página 3 de 24 Manual MS. Visualiza nombre del procedimiento proc_lista. Ejemplos: 1. utilice la instrucción EXECUTE de Transact-SQL. . tipo de objetos y fecha de creacion execute sp_help proc_lista 3.

. 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. crdate from sysobjects where type='p' order by crdate desc /* Visualiza el nombre del procedimiento. Schuller J.5 go execute promedio_final 1. name.0 Profesor R.0) go execute promedio_final 10. name.2. tipos de objetos y fecha de creacion */ exec sp_help /* visualiza nombre del procedimiento proc_lista. @nota2 numeric.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. SQL Server 2005 v 2.12. @nota4 numeric as select resultado=round(((@nota1 + @nota2 +@nota3*2 + @nota4*3)/7).12.20 go exec sp_help promedio_final Página 4 de 24 Manual MS.10. el propietario. @nota3 numeric.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. propietario. crdate from sysobjects where type='p' order by crdate desc -.

12. El texto IMPAR.------------------------------------------------------------ EJERCICIOS CON PROCEDIMIENTOS ALMACENADOS (SP): -.12.5. */ set language spanish USE NORTHWIND if exists(select name from sysobjects where name='USP_LISTADOMESESVENTA' and type ='p') begin Página 5 de 24 Manual MS. que para ejecutarse se envía.0 Profesor R. separadamente la cadena PAR para queliste los meses pares. Schuller J.EJERCICIO Procedimiento que recibe y entrega paràmetros 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. PARA LOS TEXTOS IMPARES. @nota4 numeric.' 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 -. @nota3 numeric.IDAT HERRAMIENTAS DE PRODUCTIVIDAD II CICLO II drop procedure promedio_final -. . Y TODOS. @resultado numeric output as set @resultado=round(((@nota1 + @nota2 +@nota3*2 + @nota4*3)/7). SQL Server 2005 v 2. @salida output select @salida as 'el promedio del alumno es ..EJERCICIO 01 /* crea un procedimiento. @nota2 numeric.0) go declare @salida numeric execute promedio_final 10..

SQL Server 2005 v 2. Schuller J. .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) Página 6 de 24 Manual MS.0 Profesor R.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 end go EXEC USP_LISTADOMESESVENTA 'PAR' EXEC USP_LISTADOMESESVENTA 'IMPAR' EXEC USP_LISTADOMESESVENTA 'TODOS' ---.orderdate) as mes from orders where month(orderdate)%2=1 end else if(@cad='todos') begin select distinct datename(month.FIN EJERCICIO 01 -------------------------------------------------------------------.orderdate) as mes from orders where month(orderdate)%2=0 end else if(@cad='impar') begin select distinct datename(month.

.orderid=od.IDAT HERRAMIENTAS DE PRODUCTIVIDAD II CICLO II as select e. SQL Server 2005 v 2.orderid and employeeid=@employeeid and datename(month.lastname +space(1)+firstname as empleado . 'March' EXEC USP_LISTADO_PEDIDOS_EMPLEADO_MES '2'.employeeid. Schuller J.[order details]od where e. @mes varchar(30) as select o.quantity.orderid=od.0 Profesor R.employeeid.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.count(o.employeeid and o.title.customerid=o.employeeid asc go EXEC USP_LISTADOEMPLEADOS_X_MES_VENTA 'April' EXEC USP_LISTADOEMPLEADOS_X_MES_VENTA 'May' EXEC USP_LISTADOEMPLEADOS_X_MES_VENTA 'March' -.title order by e.employees e.orderid) as cantpedidos. 'March' -. (unitprice*quantity) as total from customers c.orderid.unitprice.orders o.FIN EJERCICIO 02 -------------------------------.employeeid=o.customerid and o.orderdate)=@mes group by e.[order details]od where c.e.orderid and datename(month.FIN EJERCICIO 03 ---------------------------------------------- Página 7 de 24 Manual MS.sum(unitprice*quantity) as total from orders o.firstname.companyname.lastname .e.orderdate)=@mes go EXEC USP_LISTADO_PEDIDOS_EMPLEADO_MES '1'.

orderid=od.orderid Página 8 de 24 Manual MS. .unitprice.[order details]od where c.customerid=o.orderid go exec usp_reporte_pedidos -.orderid.FIN EJERCICIO 04 ---------------------------------.orders o.title from customers c.IDAT -. Schuller J.e.e.customerid and o.orderid=od.customerid and o. datename(month.customerid=o.employeeid=o. (unitprice*quantity) as total.lastname +space(1)+firstname as empleado .companyname.[order details]od.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. (unitprice*quantity) as total from customers c.quantity.companyname. @mes varchar(30) as exec('select o.orders o.quantity.employeeid and c.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).employees e where e.0 Profesor R. SQL Server 2005 v 2.orderdate) as mes .employeeid.orderid.unitprice.

separadamente la cadena PAR para queliste los meses pares. PARA LOS TEXTOS IMPARES.IDAT HERRAMIENTAS DE PRODUCTIVIDAD II CICLO II and employeeid in ('+ @employeeid +') and datename(month. Y TODOS.orderdate)=('+@mes+')') go usp_selecionmultiple "1"."'april'" -. */ 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. que para ejecutarse se envía.orderdate) as mes from orders where month(orderdate)%2=1 end else if(@cad='todos') begin select distinct datename(month. SQL Server 2005 v 2.EJERCICIO 06 /* crea un procedimiento. .0 Profesor R.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 end go exec usp_listadomesesventa 'par' exec usp_listadomesesventa 'impar' exec usp_listadomesesventa 'todos' Página 9 de 24 Manual MS. Schuller J.OTRAS APLICACIONES CON PROCEDIMIENTOS ALMACENADOS ---------------------------------------. El texto IMPAR.

orderid=od. Schuller J.sum(unitprice*quantity) as total from orders o.employeeid=o.FIN EJERCICIO 07 -------------------------------.firstname.[order details]od where e.lastname +space(1)+firstname as empleado .title order by e. SQL Server 2005 v 2.e.e.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.employees e.lastname .employeeid and o.count(o.orderdate)=@mes group by e. .title.employeeid asc go EXEC USP_LISTADOEMPLEADOS_X_MES_VENTA 'April' EXEC USP_LISTADOEMPLEADOS_X_MES_VENTA 'May' EXEC USP_LISTADOEMPLEADOS_X_MES_VENTA 'March' -.0 Profesor R.FIN EJERCICIO 06 -------------------------------------------------------------------.IDAT HERRAMIENTAS DE PRODUCTIVIDAD II CICLO II ---.employeeid.employeeid.orderid) as cantpedidos.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 Página 10 de 24 Manual MS.orderid and datename(month.

orderdate)=@mes go EXEC USP_LISTADO_PEDIDOS_EMPLEADO_MES '1'.quantity.[order details]od where c. 'March' EXEC USP_LISTADO_PEDIDOS_EMPLEADO_MES '2'.lastname +space(1)+firstname as empleado .orderid. 'March' -.customerid=o.orderid=od.unitprice. SQL Server 2005 v 2.employeeid.orderid GO EXEC USP_REPORTE_PEDIDOS -.FIN EJERCICIO 09 ---------------------------------.EJERCICIO 10 Página 11 de 24 Manual MS.companyname.title from customers c.orderid=od.IDAT HERRAMIENTAS DE PRODUCTIVIDAD II CICLO II create proc usp_listado_pedidos_empleado_mes @employeeid int.employeeid and c.companyname.customerid and o. Schuller J.orderdate) as mes . datename(month.orderid.employees e where e.orderid and employeeid=@employeeid and datename(month. (unitprice*quantity) as total from customers c.e.employeeid=o.FIN EJERCICIO 08 ----------------------------------------------.[order details]od.customerid=o.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.customerid and o. (unitprice*quantity) as total. .orders o.quantity.0 Profesor R. @mes varchar(30) as select o.unitprice.orders o.e.

.orderdate)=('+@mes+')') go usp_selecionmultiple "1".orders o.orderid and employeeid in ('+ @employeeid +') and datename(month.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)."'April'" ------------------------------------. @MES VARCHAR(30) as exec('select o.[order details]od where c.customerid and o.0 Profesor R.companyname.quantity.orderid. (unitprice*quantity) as total from customers c.unitprice. SQL Server 2005 v 2.orderid=od. Schuller J.customerid=o.MÀS 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 Página 12 de 24 Manual MS.

con las tablas CLIENTES y FAC_CABE y va a mostrar el nombre del cliente de latabla clientes.employees' go exec sp_listar_tabla 'dbo. SQL Server 2005 v 2.cli_codigo where clientes.cli_nombre.fac_total from clientes inner join fac_cabe on clientes. el numero de factura de la tabla fac_cabe.0 Profesor R.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.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.cli_codigo=@cli_codigo go --ejecutar exec sp_facturas 'c0002' go --13) CREAR UN PROCEDIMIENTO QUE RECIBA EL NOMBRE DE UNA TABLA -. sòlose 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. asì como el total de dicha factura.cli_codigo=fac_cabe.orders' go Página 13 de 24 Manual MS. Schuller J. fac_cabe. fac_cabe.fac_numero. .

products where unitprice>=40 go --ejecutar el procedimiento almacenado declare @n int exec sp_cantidad @n output print convert(char(2). Schuller J. LA CANTIDAD -.@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 -------.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. . @uni char(4). @stk int Página 14 de 24 Manual MS. 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 -------.2).ANALIZAR ESTE SP ----------------------------create procedure sp_total_clientes @codigo char(5) as select cli_codigo.0 Profesor R.IDAT HERRAMIENTAS DE PRODUCTIVIDAD II CICLO II --14 CREAR UN PROCEDIMIENTO QUE RETORNE UN VALOR OUTPUT. @pre numeric(10. @nom varchar(40). SQL Server 2005 v 2.ANALIZAR ESTE SP ----------------------------create procedure sp_grabar_articulo @cod char(5).

@pre.art_unidad.'monitor samsung lcd'.'uni'.IDAT HERRAMIENTAS DE PRODUCTIVIDAD II CICLO II as insert into articulos(art_codigo.@nom. Página 15 de 24 Manual MS.0 Profesor R.MÀS 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.80 select * from articulos go sp_helpdb bdfactura go -.---------------------------. Schuller J. SQL Server 2005 v 2. art_precio. art_nombre.650.@uni.art_stock) values(@cod. fecha datetime default getdate().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 ---------------.@stk) go --ejecutar el procedimiento execute sp_grabar_articulo 'a0021'.ANALIZAR ESTE SP ----------------------------create procedure sp_facturas_mes @anno int as select month(fac_fecha) as mes.17 PASANDO UN AÑO MUESTRE LA CANTIDAD DE FACTURAS POR MES EN ESE AÑO -------. .

2) constraint ckcero check(importe >0).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) Página 16 de 24 Manual MS. SQL Server 2005 v 2. igv as 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.IDAT HERRAMIENTAS DE PRODUCTIVIDAD II CICLO II importe decimal(8.0 Profesor R. . Schuller J.19 )--campo calculado alter table factura add total as importe + importe*0.

0 Profesor R. Schuller J. Página 17 de 24 Manual MS. art_nombre varchar (30) NULL . art_unidad char (4) NULL .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. . 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 -. SQL Server 2005 v 2.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.

cli_codigo char (5) NULL foreign key(cli_codigo) references Clientes(cli_codigo). art_cantidad int 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) . cli_ruc varchar(11) NULL . fac_fecha datetime 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. fac_igv char (1) NULL .0 Profesor R. SQL Server 2005 v 2. .IDAT HERRAMIENTAS DE PRODUCTIVIDAD II art_precio numeric(10. --Primary Key (Fac_numero. art_codigo char (5) NOT NULL. cli_nombre varchar (25) NULL . ven_nom varchar (30) NULL . 2) NULL . Schuller J. 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. 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 .art_codigo) ) GO Página 18 de 24 Manual MS. fac_total money NULL . cli_telefono int NULL .

'JHON MORALES '.'PERCY OBANDO '.'FERNANDO REDONDO '.38532523450.64223253459. Principal 123 ') INSERT INTO clientes VALUES ('C0004'.'MONICA GONZALES '.'Av.7685704.6789456.4563457.8975783.7894073.67362577361.Ingreso de Data a las Tablas INSERT INTO clientes VALUES ('C0001'.'LAURA MORENO LEE '.45632573556.'Lizardo Montero 340') INSERT INTO clientes VALUES ('C0015'.'Calle Cueva 432 ') INSERT INTO clientes VALUES ('C0012'.'CASTAÑEDA BLAS '.'Jr. Iquitos 228 ') INSERT INTO clientes VALUES ('C0011'.'05/02/2000') Página 19 de 24 Manual MS. Naranjos 5689') INSERT INTO clientes VALUES ('C0008'.24623325742.'MIGUEL RAMIREZ '.'EUGENIO CAMPOS '.0 Profesor R.1234567. Javier Prado 114') INSERT INTO clientes VALUES ('C0013'.'Jr.5674566.'Av.'Jr.54673356250.'MIGUEL NARVA '.5524453.45622462572.7460647.7894568.'La Perla Callao') INSERT INTO clientes VALUES ('C0005'. Habich 4567 ') INSERT INTO clientes VALUES ('C0019'. . La Marina 1234') INSERT INTO clientes VALUES ('C0002'.54336725321.'ALEJANDRO MORENO '.1189453.'CLAUDIA LEE '.'Av.67233674566. SQL Server 2005 v 2.IDAT HERRAMIENTAS DE PRODUCTIVIDAD II CICLO II -.56325236234.'GABRIELA ZAPATA '.'LUCILA PARDO '.'18/07/1999') INSERT vendedor VALUES('V0003'.66325234580.9583569.'ROBERTO BAGGIO '.6546534. Salavery 876 ') INSERT INTO clientes VALUES ('C0018'. Pio XII 112 ') INSERT INTO clientes VALUES ('C0014'.'SANDRA CAMPOS '.'Manuel Vivar'.'Jr.'Eduardo Soto'.53476250977.'Av. Habich 543 ') INSERT INTO clientes VALUES ('C0009'.65362533671.'Av.'Calle San Pedro 134') INSERT INTO clientes VALUES ('C0007'.'MELISSA PAICO '.'Av.'Pamela Gutierrez'. Schuller J.'Av.87662554325.'CLAUDIO PARDO '.6584503. Pardo 456 ') INSERT INTO clientes VALUES ('C0003'.56632545357.5678356.'Av.'Av.'Av.72313254560.'RAUL MORIENTES '.5678466.2678958.'10/05/1999') INSERT vendedor VALUES('V0002'. Wilson 678 ') INSERT INTO clientes VALUES ('C0020'.6789453.67836768957. Wilson 1267 ') go set dateformat dmy go INSERT vendedor VALUES('V0001'. Pardo 567 ') INSERT INTO clientes VALUES ('C0021'. Dominico 554') INSERT INTO clientes VALUES ('C0016'.34532523458.

'V0002') INSERT INTO fac_cabe VALUES ('F0003'.100. 30.410.00.'MOUSE GENIOUS '.120) INSERT INTO articulos VALUES ('A0019'.00.'PENTIUM MMX 260 '.'V0004') INSERT INTO fac_cabe VALUES ('F0018'.'12/02/2000'.'10/02/2002'.'UNI'. 92) INSERT INTO articulos VALUES ('A0010'.4446.'V0001') INSERT INTO fac_cabe VALUES ('F0005'.'11/01/2002'.IDAT HERRAMIENTAS DE PRODUCTIVIDAD II CICLO II INSERT vendedor VALUES('V0004'.'V0003') INSERT INTO fac_cabe VALUES ('F0024'.60.'C0002'.650.'09/12/2000'.'N'.'C0005'.'09/02/2002'. 30. SQL Server 2005 v 2.'V0002') INSERT INTO fac_cabe VALUES ('F0009'.'C0002'.560. 25. 12.'C0005'.'V0002') INSERT INTO fac_cabe VALUES ('F0016'.00.'V0002') INSERT INTO fac_cabe VALUES ('F0014'.'03/12/2001'.220.00.'03/08/2001'.'C0004'. 60.'C0002'.00.'12/11/2000'.'C0007'.'03/01/2002'. 80) INSERT INTO articulos VALUES ('A0006'.'S'.00.00.00.9100.'S'.'01/11/2001'.'S'.00.'N'.1980.220) INSERT INTO articulos VALUES ('A0004'.'C0012'.60.'MONITOR SYNMASTER 3N'.'S'.'01/07/2001'.'UNI'.'N'. 35) INSERT INTO articulos VALUES ('A0005'.'V0001') INSERT INTO fac_cabe VALUES ('F0017'.'C0005'. 25.'C0005'.4305.220) INSERT INTO articulos VALUES ('A0003'.00.'01/06/2001'.'UNI'.3556.'07/01/2002'.'UNI'.'C0005'.'S'. 20) INSERT INTO articulos VALUES ('A0007'.'C0005'.'02/01/2001'.'MTS'.'UNI'.'S'.690.'C0018'.'N'.180.'IMPRESORA EPSON 1234'.'Juan Del Carpio'.'C0011'.'V0003') INSERT INTO fac_cabe VALUES ('F0010'.14960.894.'UNI'.'V0002') INSERT INTO fac_cabe VALUES ('F0022'.'C0001'.00.00.320) INSERT INTO articulos VALUES ('A0012'.00.'N'.'C0012'.'N'.00.select * from fac_cabe INSERT INTO fac_cabe VALUES ('F0001'.'V0002') INSERT INTO fac_cabe VALUES ('F0004'.00.'V0004') INSERT INTO fac_cabe VALUES ('F0012'.'V0001') INSERT INTO fac_cabe VALUES ('F0019'.'TINTA BJC21 B/N '.'MONITOR VIEWSONIC '.1053.'01/01/2002') INSERT INTO articulos VALUES ('A0001'.4320.00.'V0003') INSERT INTO fac_cabe VALUES ('F0008'.120) INSERT INTO articulos VALUES ('A0008'.50.'C0012'.'MEMORIA DIMM 64 '.'V0001') INSERT INTO fac_cabe VALUES ('F0013'.'C0004'.2210.'N'.'TINTA BJC21 COLOR '.'C0003'.'S'.200) INSERT INTO articulos VALUES ('A0016'.170.550.205.00.'S'.190) -.00.'12/10/2001') INSERT vendedor VALUES('V0005'.'C0001'.'N'.'UNI'. Schuller J. 33) INSERT INTO articulos VALUES ('A0009'.'V0004') INSERT INTO fac_cabe VALUES ('F0025'.510.'S'.'08/06/2000'.'UNI'.'V0001') INSERT INTO fac_cabe VALUES ('F0011'.'V0003') INSERT INTO fac_cabe VALUES ('F0006'.'KG '.2954.'N'.'N'.'02/02/2000'. 25) INSERT INTO articulos VALUES ('A0014'.'12/02/2002'.'08/12/2000'.00.'N'.00.'PENTIUM III 600 '.'C0002'.'03/04/2000'.'MOUSE MICROSOFT '. 50.'10/09/2000'.510.'C0020'.'TECLADO EPSON 102 '.00.'V0001') Página 20 de 24 Manual MS.'C0002'.'C0016'.'V0001') INSERT INTO fac_cabe VALUES ('F0002'.850.'V0004') INSERT INTO fac_cabe VALUES ('F0021'.'UNI'. 97) INSERT INTO articulos VALUES ('A0011'.'N'.'V0002') INSERT INTO fac_cabe VALUES ('F0023'. 80.00.'C0016'.8291.'05/01/2002'.'03/05/2000'.'S'.00.00.10808.235) INSERT INTO articulos VALUES ('A0002'. 28.'Ketty Videna'.'PENTIUM IV 1000 '.'IMPRESORA CANON 1000'.'UNI'.'UNI'.'N'.122) INSERT INTO articulos VALUES ('A0020'.0 Profesor R.500.'MOUSE LOGITECH '.'MEMORIA ZIP 32 '.00.'V0003') INSERT INTO fac_cabe VALUES ('F0020'.'V0003') INSERT INTO fac_cabe VALUES ('F0015'.'03/03/2002'.'S'.'KG '.'FUNDAS NAYLON '.'03/03/2001'. .'V0002') INSERT INTO fac_cabe VALUES ('F0007'.6908.'UNI'.446.'02/10/2001'.'UNI'.'S'.

'06/04/2002'. Schuller J.'A0004'.764.'A0001'.14) INSERT INTO fac_deta VALUES ('F0013'. 2) INSERT INTO fac_deta VALUES ('F0016'.'A0004'.'A0020'.'05/03/2002'. 5) INSERT INTO fac_deta VALUES ('F0011'.13) INSERT INTO fac_deta VALUES ('F0007'.'A0004'. 6) INSERT INTO fac_deta VALUES ('F0011'.13) INSERT INTO fac_deta VALUES ('F0019'.0 Profesor R.'A0014'.11) INSERT INTO fac_deta VALUES ('F0006'.'A0010'. 6) INSERT INTO fac_deta VALUES ('F0019'.'A0005'.'A0007'.11) INSERT INTO fac_deta VALUES ('F0021'.'A0004'. 6) INSERT INTO fac_deta VALUES ('F0020'.'A0001'.'A0006'.'C0004'. 7) INSERT INTO fac_deta VALUES ('F0010'.'A0009'.'A0012'. 3) INSERT INTO fac_deta VALUES ('F0016'. 2) INSERT INTO fac_deta VALUES ('F0002'.11) INSERT INTO fac_deta VALUES ('F0019'.15) INSERT INTO fac_deta VALUES ('F0021'.'A0011'.11) INSERT INTO fac_deta VALUES ('F0005'.'A0002'.'A0020'.'A0014'.00.13) INSERT INTO fac_deta VALUES ('F0012'. 7) INSERT INTO fac_deta VALUES ('F0017'. 4) INSERT INTO fac_deta VALUES ('F0002'.'A0001'. 5) INSERT INTO fac_deta VALUES ('F0004'.'A0008'.'A0007'.21) INSERT INTO fac_deta VALUES ('F0014'.'A0007'.'V0001') go INSERT INTO fac_deta VALUES ('F0001'.2150. 4) INSERT INTO fac_deta VALUES ('F0018'.'A0002'. 5) INSERT INTO fac_deta VALUES ('F0017'.'A0006'.'A0004'.'A0007'. 3) INSERT INTO fac_deta VALUES ('F0005'.'A0006'.'V0003') INSERT INTO fac_cabe VALUES ('F0027'. 8) INSERT INTO fac_deta VALUES ('F0010'.'A0014'. 4) INSERT INTO fac_deta VALUES ('F0005'.'A0005'. 2) INSERT INTO fac_deta VALUES ('F0009'. 2) Página 21 de 24 Manual MS. 5) INSERT INTO fac_deta VALUES ('F0018'.'A0014'.'C0004'. 4) INSERT INTO fac_deta VALUES ('F0011'.'A0007'.'N'.'A0009'.'A0010'.'N'. 2) INSERT INTO fac_deta VALUES ('F0015'.'A0005'. SQL Server 2005 v 2.23) INSERT INTO fac_deta VALUES ('F0008'.00. 7) INSERT INTO fac_deta VALUES ('F0020'.'A0006'.16) INSERT INTO fac_deta VALUES ('F0002'. 2) INSERT INTO fac_deta VALUES ('F0010'.'A0005'. 3) INSERT INTO fac_deta VALUES ('F0001'. 1) INSERT INTO fac_deta VALUES ('F0018'. 6) INSERT INTO fac_deta VALUES ('F0003'.'A0006'. .'A0011'.'A0007'.'A0011'.IDAT HERRAMIENTAS DE PRODUCTIVIDAD II CICLO II INSERT INTO fac_cabe VALUES ('F0026'. 4) INSERT INTO fac_deta VALUES ('F0018'.12) INSERT INTO fac_deta VALUES ('F0005'.

15) INSERT INTO fac_deta VALUES ('F0025'.'A0011'. .convert(char(10).'A0003'. Schuller J. 5) INSERT INTO fac_deta VALUES ('F0023'.'A0008'.fac_fecha. 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.'A0007'.IDAT HERRAMIENTAS DE PRODUCTIVIDAD II CICLO II INSERT INTO fac_deta VALUES ('F0021'.'A0003'.'A0010'.0 Profesor R.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.'A0006'.'A0007'.'A0006'.11) INSERT INTO fac_deta VALUES ('F0026'. 3) INSERT INTO fac_deta VALUES ('F0027'.'A0007'. 4) INSERT INTO fac_deta VALUES ('F0027'. 3) INSERT INTO fac_deta VALUES ('F0022'.103) Fecha. 4) INSERT INTO fac_deta VALUES ('F0026'.'A0001'.fac_total from fac_cabe where cli_codigo=@cod go --Llamando al proc alm Página 22 de 24 Manual MS. 7) INSERT INTO fac_deta VALUES ('F0024'.13) INSERT INTO fac_deta VALUES ('F0024'. 4) INSERT INTO fac_deta VALUES ('F0023'. SQL Server 2005 v 2.

0 Profesor R.art_nombre.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.telefono char(10). art_cantidad.a. Schuller J.art_codigo. (art_precio*art_cantidad) Total from articulos as a.art_precio.fac_deta as fd where a.nombres varchar(30).art_codigo and fac_numero in("+@fac+")") go -.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 Página 23 de 24 Manual MS.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.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). SQL Server 2005 v 2.art_codigo=fd.

.'D'. SQL Server 2005 v 2.0 Profesor R.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 Página 24 de 24 Manual MS.'V'.'C'.IDAT HERRAMIENTAS DE PRODUCTIVIDAD II CICLO II --listar informaciòn 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'.'K')) -. Schuller J.