informe guias sql

26

Click here to load reader

Upload: ivan2425

Post on 24-Jul-2015

108 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: INFORME GUIAS SQL

GUIA 2

Tema: Consultas avanzadas

OBJETIVOS Realizar Consultas avanzadas: Subconsultas, columnas calculadas. Uso de Funciones Agregadas lenguaje SQL (COUNT, SUM, MAX, MIN, AVG). Cláusulas, predicados y Operadores SQL. Combinación de múltiples tablas (INNER JOIN, OUTER JOIN), Tipos de Combinación de

tablas (Combinación Interna y/o Externa) y las diferencias entre las sintaxis del lenguaje SQL−89 y SQL-92. UNION de tablas. Vistas.

I. Fundamento Teórico:

Busque en la ayuda de Transact-SQL ó en Libros en Pantalla de SQL Server los comandos que se usarán en la presente práctica.

II.- Práctica Dirigida:

Inicializar la Computadora con el sistema operativo Microsoft Windows XP. Iniciar sesión con el usuario BDNNN. (Donde NNN es nro. de Computadora)

Luego cargar el Administrador corporativo de SQL Server. Realizar la conexión al servidor usando el inicio de sesión del usuario 01 creado en la práctica1. (Recuerde ya no debe usar SA, el profesor del curso usará este inicio de sesión SA y tendrá una clave de acceso)

2.1. Creación de Consultas en el Analizador de Consultas

Seleccionar su base datos y ubícate en la sección tablas. Ahora ir al menú Herramientas Analizador de Consultas. Usted debe conectarse con el usuario02. Ahora realizar las siguientes consultas. Nota: No se olvide de guardar las consultas (Comando SQL y el resultado)

a) Ejemplo1: Realice una consulta que muestre los pedidos en el año 2002, en los meses de enero, febrero y diciembre, de todos los clientes de la ciudad de Madison ó Kingston de los Estados Unidos, donde el monto del pedido sea mayor a $1,000 y el cliente tenga una dirección conocida. La información a mostrar es: Nro de pedido, fecha de pedido, Monto de Pedido. Esta información debe estar ordenada por fecha de pedido y el monto de pedido. Para esta consulta Usted solo debe usar Subconsultas.

b) La codificación será de la siguiente manera:

SELECT Nro_Pedido, Fecha_pedido, Monto_pedidoFROM Pedido WHERE (YEAR(Fecha_pedido) = 2002) AND

(MONTH(Fecha_pedido) IN (1, 2, 12)) AND (Monto_pedido > 1000) AND (Cod_cliente IN (SELECT cod_cliente FROM cliente

WHERE Ciudad = 'Madison' OR Ciudad = 'Kingston' AND Direccion_1 IS NOT NULL))

ORDER BY Fecha_pedido, Monto_pedido

Page 2: INFORME GUIAS SQL

c) Ahora para ejecutar la consulta. Seleccionar toda la instrucción anterior (Marcar bloque) y luego pulsar la tecla F5. El resultado obtenido será:

d) Ahora responda las siguientes preguntas: Consulte a su profesor en caso que tenga dudas. ¿Qué funciones usamos para la consulta, y que permite estas funciones?

Year: Devuelve un entero que representa la parte del año de la date especificada.Month: Devuelve un entero que representa el mes de date especificado.

¿Qué cláusulas SQL usamos?

La cláusula SELECT se usa para listar los atributos que se desean en el resultado de una consulta.La cláusula FROM lista las relaciones que se van a examinar en la evaluación de la expresiónLa cláusula WHERE costa de un predicado que implica atributos de las relaciones que aparecen en la cláusula FROM.

2.2. Creación de Consultas usando combinación interna de tablas.

a) Ejemplo2: Modificar la consulta del Ejemplo1 (las condiciones de filtro son las mismas), para que ahora muestre la siguiente información: Nro de pedido, nombre del cliente, fecha de pedido (solo mostrar el día y el mes), Nombre producto, Cantidad, precio y el Importe. Esta información debe estar ordenada por fecha de pedido y el importe. Para esta consulta puede usar combinación interna de tablas y opcionalmente Subconsultas si es necesario (Usar sintaxis ANSI SQL-92).

b) La codificación será de la siguiente manera: (Tipear a continuación del resultado del ejemplo1)

SELECT P.Nro_Pedido, C.Nombre_cliente, Fecha=CAST(DAY(P.Fecha_pedido) as varchar(2))

+'-'+CONVERT(varchar(2),MONTH(P.Fecha_pedido)), PR.Nombre_producto, DP.Cantidad, DP.Precio_por_unidad,Importe = DP.Cantidad * DP.Precio_por_unidad

FROM Pedido P

Page 3: INFORME GUIAS SQL

INNER JOIN Cliente C ON P.Cod_cliente = C.Cod_clienteINNER JOIN Detalle_pedido DP ON P.Id_pedido = DP.Id_PedidoINNER JOIN Producto PR ON DP.Cod_producto = PR.Cod_productoWHERE (YEAR(P.Fecha_pedido) = 2002) AND

(MONTH(P.Fecha_pedido) IN (1, 2, 12)) AND (P.Monto_pedido > 1000) AND (C.Ciudad = 'Madison' OR C.Ciudad = 'Kingston' AND C.Direccion_1

IS NOT NULL)ORDER BY P.Fecha_pedido, Importe

c) Ahora para ejecutar la consulta. Seleccionar toda la instrucción anterior (Marcar bloque) y luego pulsar la tecla F5. El resultado obtenido será:

2.3. Creación de Consultas usando combinación Externa de tablas.

a) Ejemplo3: Realice una consulta que muestre todos los empleados de la empresa, que no recibieron pedidos. La información que debe retornar es la siguiente: Código de empleado, Apellidos, Nombres y Cargo. (Usar sintaxis ANSI SQL-92).

b) La codificación será de la siguiente manera: Opcion1: Usando subconsultas

Select E.Cod_empleado, E.Apellidos, E.Nombres, E.Cargo FROM Empleado E

where cod_empleado not in (Select distinct cod_empleado from pedido )

Opcion2: Usando combinación externa

Select E.Cod_empleado, E.Apellidos, E.Nombres, E.Cargo from empleado ELEFT OUTER JOIN Pedido P ON E.Cod_empleado = P.Cod_Empleado

WHERE P.Id_Pedido IS NULL

Page 4: INFORME GUIAS SQL

c) Ahora para ejecutar la consulta. Seleccionar toda la instrucción anterior (Marcar bloque) y luego pulsar la tecla F5. El resultado obtenido será:

2.4. Creación de Consultas usando combinación de tablas y funciones agregadas.

a) Ejemplo4: Realice una consulta que muestre el número total de pedidos que recibieron los empleados de la empresa, y debe incluir también los empleados que no recibieron ningún solo pedido. La información que debe retornar es la siguiente: Nombre del Empleado, Cargo y Total pedidos recibidos. Esta información debe estar ordenada por Total Pedidos recibidos en forma Descendente. Para esta consulta puede usar combinación interna y/o externa de tablas (Usar sintaxis ANSI SQL-92).

b) La codificación será de la siguiente manera:

Opcion1:

SELECT E.Nombres, E.Cargo, Total = Count(*)FROM Pedido PINNER JOIN Empleado E ON P.Cod_empleado = E.Cod_empleadoGROUP BY E.Nombres, E.CargoORDER BY 2 DESC

RESULTADO:

Page 5: INFORME GUIAS SQL

Opcion2:

SELECT E.Nombres, E.Cargo, Total = Count(*)FROM Pedido PRIGHT OUTER JOIN Empleado E ON P.Cod_empleado = E.Cod_empleadoGROUP BY E.Nombres, E.CargoORDER BY Total DESC

RESULTADO:

Opcion3:

SELECT E.Nombres, E.Cargo, Total = Count(P.Cod_Empleado)FROM Pedido PRIGHT OUTER JOIN Empleado E ON P.Cod_empleado = E.Cod_empleadoGROUP BY E.Nombres, E.CargoORDER BY Total desc

RESULTADO:

Advertencia: valor NULL eliminado por el agregado u otra operación SET.

Page 6: INFORME GUIAS SQL

2.5. Creación de Consultas usando múltiples combinaciones externas de tablas .

a) Ejemplo5: Realice una consulta que muestre todos los empleados de la empresa, que recibieron pedidos y debe incluir también los empleado no recibieron ningún solo pedido. La información que debe retornar es la siguiente: Nro de pedido, nombre del Empleado, Estado del envío del pedido, Nombre producto. (Usar sintaxis ANSI SQL-92).

b) La codificación será de la siguiente manera:

SELECT P.Nro_Pedido, E.Nombres, P.Enviado, PR.Nombre_producto

FROM Pedido PRIGHT OUTER JOIN Empleado E ON P.Cod_empleado = E.Cod_empleadoLEFT OUTER JOIN Detalle_pedido DP ON P.Id_pedido = DP.Id_PedidoLEFT OUTER JOIN Producto PR ON DP.Cod_producto = PR.Cod_producto

c) Ahora para ejecutar la consulta. Seleccionar toda la instrucción anterior y luego pulsar la tecla F5. El resultado obtenido será:

2.6. Creación de Consultas usando funciones agregadas SUM, MAX, MIN, AVG.

a) Ejemplo6: Realice una consulta que muestre el promedio de montos de pedidos en cada uno de los meses del año 2003. La información a mostrar es Nombre del mes, Promedio. La información debe estar ordenado por mes (Desde enero a diciembre).

b) La codificación será de la siguiente manera:

Select NroMes =DatePart(MM,Fecha_pedido),NombreMes =DATENAME(month,Fecha_pedido),Promedio = AVG(Monto_pedido)

From PedidoWhere Year(Fecha_pedido)=2003Group By DATENAME(month,Fecha_pedido), DatePart(MM,Fecha_pedido)--HAVING AVG(Monto_pedido) > 1800Order by DatePart(MM,Fecha_pedido)

Page 7: INFORME GUIAS SQL

c) Ahora para ejecutar la consulta. Seleccionar toda la instrucción anterior y luego pulsar la tecla F5. El resultado obtenido será:

d) Ahora responda las siguientes preguntas: Consulte a su profesor en caso que tenga dudas.

¿Cómo sería una consulta que muestre el monto de pedido máximo y mínimo de cada mes en el año 2003?

Select NroMes =DatePart(MM,Fecha_pedido),NombreMes =DATENAME(month,Fecha_pedido),Max_monto = MAX(Monto_pedido),Min_monto = MIN(Monto_pedido)

From PedidoGroup By DATENAME(month,Fecha_pedido), DatePart(MM,Fecha_pedido)Order by DatePart(MM,Fecha_pedido)

e) A partir del siguiente resultado, ¿Cuál sería la consulta? (La consulta se debe aplicar a pedidos de todos los años)

Page 8: INFORME GUIAS SQL

2.7. Tipos especiales de combinación de tablas (SELF JOIN).

FKReporta_a

Empleado

Cod_empleado: int IDENTITY(1,1)

Apellidos: varchar(20) NOT NULLNombres: varchar(10) NOT NULLCargo: varchar(30) NULLFecha_nacimiento: datetime NULLFecha_contratacion: datetime NULLTfno_particular: varchar(20) NULLExtension: varchar(4) NULLFoto: image NULLNotas: text NULLReporta_a: int NULL (FK)Sueldo: money NULLNro_SS: varchar(12) NULLAFP: varchar(25) NULLDireccion: char(45) NULL

Figura 1

a) Ejemplo7: Según la figura 1 un Empleado depende de otro empleado (Reporta a). Por lo tanto, realice una consulta que muestre Los empleados y los correspondientes Jefes a cuales Reporta las actividades realizadas. La información a mostrar es Nombre del Jefe, Cargo Jefe, Nombre del empleado y cargo del empleado

b) La codificación será de la siguiente manera:

Select Jefe.Nombres AS Nombre_Jefe, Jefe.Cargo AS Cargo_jefe, E.Nombres, E.Cargo

FROM Empleado EINNER JOIN Empleado Jefe ON Jefe.Cod_empleado = E.Reporta_A

c) Ahora para ejecutar la consulta. Seleccionar toda la instrucción anterior y luego pulsar la tecla F5. El resultado obtenido será:

Page 9: INFORME GUIAS SQL

2.8. Combinación de Tablas, SubConsultas y Funciones Agregadas

Detalle_pedido

ID_pedido: intCod_producto: int

Precio_por_unidad: moneyCantidad: int

Producto

Cod_producto: int

Nombre_producto: varchar(50)Color: varchar(20)Tamaño: varchar(10)Publico_objetivo: varchar(10)Precio: moneyCod_proveedor: intCod_Tipo_Producto: intClase_producto: varchar(50)

Tipo_producto

Cod_Tipo_Producto: int

Nombre_tipo_producto: varchar(50)Descripcion: textImagen: image

Figura 2

a) Ejemplo8: El gerente de Ventas STEVEN esta en uno de sus días de malas, y ha prometido a despedir al primer empleado que no sea eficiente en su trabajo, y justo en este momento ve a XAVIER (Asociado de marketing) y para hacerle sudar la gota gorda le encarga obtener la siguiente información: Obtener el nombre del tipo de producto que genera mayores porcentajes de ingresos a la empresa según los pedidos recibidos. Xavier como buen marketero no sabe nada de computación y para no perder su trabajo busca a un amigo que le resuelva el problema, y justamente TU eres el amigo que busca. ¿Podrás ayudarle?

b) ¿La siguiente codificación será correcto y talvez sea lo que necesitas?: (Para ayudarte vea la figura 2)

SELECT tp.Nombre_tipo_producto, SUM(DP.Cantidad * DP.Precio_por_unidad ) AS TotalMontoPedido,CAST(SUM(DP.Cantidad * DP.Precio_por_unidad) /

(Select SUM(DP2.Cantidad * DP2.Precio_por_unidad) From Detalle_pedido DP2 ) * 100 as DECIMAL(6,2))

AS PorcentageDelTotalPedidosFROM Detalle_pedido DP

JOIN Producto PR ON DP.Cod_producto = PR.Cod_productoJOIN Tipo_Producto TP ON PR.Cod_tipo_producto = TP.Cod_tipo_producto

GROUP BY tp.Nombre_tipo_productoORDER BY 3 DESC

Page 10: INFORME GUIAS SQL

c) Ahora para ejecutar la consulta. Seleccionar toda la instrucción anterior y luego pulsar la tecla F5. El resultado será:

2.9. Unión de Tablas

a) Ejemplo9: Obtener los 3 pedidos más antiguos y los 2 últimos pedidos. Ordenar por fecha de pedido el resultado final.

b) La codificación será de la siguiente manera:

SET NOCOUNT ONSelect top 3 ID_pedido, Nro_Pedido, Fecha_pedido, Cod_cliente, Monto_pedido

Into #Pedidos1 From Pedido Order By Fecha_pedido ASC

Select top 2 ID_pedido, Nro_Pedido, Fecha_pedido, Cod_cliente, Monto_pedido

Into #Pedidos2 From Pedido Order By Fecha_pedido DESC

--SET NOCOUNT OFFSelect * From #Pedidos1

Union ALLSelect * From #Pedidos2

Order By #Pedidos1.Fecha_pedido ASC

DROP TABLE #Pedidos1DROP TABLE #Pedidos2

Page 11: INFORME GUIAS SQL

c) Ahora para ejecutar la consulta. Seleccionar toda la instrucción anterior y luego pulsar la tecla F5. El resultado obtenido será:

2.10. Por último guardar todo y finalizamos la presente práctica.

Información AdicionalQue realiza la siguiente consulta

Select NroMes =DatePart(MM,Fecha_pedido),NombreMes =DATENAME(month,Fecha_pedido),Max_monto_pedido = MAX(Monto_pedido),Min_monto_pedido = MIN(Monto_pedido)

From PedidoWhere DatePart(yy, Fecha_pedido)=2003Group By DATENAME(month,Fecha_pedido), DatePart(MM,Fecha_pedido)Order by DatePart(MM,Fecha_pedido)

Resultado

Page 12: INFORME GUIAS SQL

Que realiza la siguiente consulta

SELECT NombreMes=DATENAME(month,P.Fecha_pedido), SUM(DP.Cantidad * DP.Precio_por_unidad ) AS TotalMontoPedido,CAST(SUM(DP.Cantidad * DP.Precio_por_unidad) /

(Select SUM(DP2.Cantidad * DP2.Precio_por_unidad) From Detalle_pedido DP2 ) * 100 as DECIMAL(6,2))

AS PorcentageDelTotalPedidosFROM Detalle_pedido DP

JOIN Producto PR ON DP.Cod_producto = PR.Cod_productoJOIN Tipo_Producto TP ON PR.Cod_tipo_producto = TP.Cod_tipo_productoJOIN Pedido P ON DP.Id_pedido = P.Id_pedido

WHERE tp.Nombre_tipo_producto = 'Competición'GROUP BY DATENAME(month,P.Fecha_pedido)ORDER BY 3 DESC

Resultado

Page 13: INFORME GUIAS SQL

GUIA 3

Tema: Procedimientos Almacenados

OBJET1VOS

Programación de lenguaje SQL con Procedimientos almacenados: Creación, Modificación, Eliminación, Permisos. Ejecución. Parámetros (Input/Output).

Tipo de datos. Declaración de Variables. Variables locales y globales. Control de Flujo de programa. Actualización de datos de una tabla mediante comandos

DML dentro de un procedimiento almacenado. Control de errores. Gestión de Objetos Temporales.

I. Fundamento Teórico:

Busque en la ayuda de Transact-SQL 6 en Libras en Pantalla de SQL Server los comandos que se usaran en la presente práctica.

II. Practica Dirigida: Procedimiento almacenados en SQL Server 2000

Inicializar la PC con Windows. Iniciar sesión con el usuario BDNNN. Luego cargar el Administrador corporativo de SQL Server. Realizar la conexión al

servidor usando el inicio de sesión del usuario 01 creado en la práctica. (Recuerde ya no debe usar SA, el profesor del curso usara este inicio de sesión SA y tendrá una clave de acceso).

2.1. Ejemplo 1: Realice un procedimiento, que permita buscar Proveedores de un determinado País. La información a obtener es: nombre del proveedor, ciudad, teléfono y código postal. El nombre del país es indicado por el usuario.

En el administrador Corporativo, seleccionar su base datos y ubícate en la sección Procedimientos Almacenados. Ahora ir al menú Herramientas -» Analizador de Consultas. Usted debe conectarse con el usuarioOl para que pueda crear el procedimiento almacenado. Verificar que esté conectado a su base de datos correspondiente:

Nota: No se olvide de guardar el código del procedimiento y el resultado en su disco de trabajo.

a) Creación del Procedimiento: Tapear el siguiente código.

CREATE PROCEDURE dbo.usp_BuscarProveedorPorPais@Pais varchar(40)

ASSELECT Nombre,Ciudad,Telefono,Codigo_PostalFROM ProveedorWHERE Pais=@Pais

if @@RowCount = 0begin

PRINT 'No existe proveedores en este pais'RETURN -1

EndRETURN 0

Page 14: INFORME GUIAS SQL

b) Compilación del procedimiento: Seleccionar todo el procedimiento y luego pulse la tecla F5 para compilar y almacenarlo en el servidor de base de datos.

Si existen errores en la compilación, corrige estos errores con la ayuda del profesor. En caso de que vea el mensaje de error: "Permiso CREATE PROCEDURE denegado en la

base de datos TiendaComeii20'." Consulte a tu profesor sobre cómo puede otorgar permisos al UsuarioOl para que pueda CREAR 6 MODIFICAR procedimientos.

Nota: Si desea modificar el procedimiento Usted puede usar el comando ALTER: (solo debes cambiar la palabra CREATE porALTER en el paso A y volver a compilar el procedimiento)

ALTER PROCEDURE dbo.usp_BuscarProveedorPorPais

c) Ejecución del procedimiento: Ahora debe probar si funciona correctamente, por ejemplo buscar los proveedores de "Japon".

EXEC usp_BuscarProveedorPorPais 'Japón'

RESULTADO:

d) Ahora responda las siguientes preguntas:

¿Buscar los proveedores de los siguientes Países?; Canadá, EE.UU, Francia y Reino Unido.

EXEC usp_BuscarProveedorPorPais 'Canadá'

EXEC usp_BuscarProveedorPorPais 'EE.UU.'

EXEC usp_BuscarProveedorPorPais 'Francia'EXEC usp_BuscarProveedorPorPais 'Reino Unido'

Page 15: INFORME GUIAS SQL

2.2. Ejemplo2: Crear un procedimiento, que permita buscar un determinado empleado por su codigo. El codigo se debe transferir como parametro INPUT del procedimiento. Si existe el codigo se debe mostrar la siguiente informacion: Apellidos y Nombres (en una sola columna), Telefono, Edad y Obs. En la columna Obs de debe mostrar segiin su edad si es "Menor de Edad" 6 "Empleado Joven" o"Empleado Adulto". En caso de que no exista se debe mostrar un mensaje apropiado.

a) Creación del Procedimiento: Tipear el siguiente codigo

CREATE PROCEDURE dbo.usp_BuscarEmpleado@CodEmp int = 0

ASIF Exists (SELECT cod_empleado FROM empleado WHERE cod_empleado = @CodEmp)Begin

SELECT [Apellidos y Nombres] = Apellidos + ', ' + Nombres,Telefono = Tfno_Particular,Edad = Year(GetDate())-Year(Fecha_Nacimiento),Obs = CASE WHEN Year(GetDate())-Year(Fecha_Nacimiento) < 18

THEN 'Es menor de edad' WHEN Year(GetDate())-Year(Fecha_Nacimiento) < 25

THEN 'Empleado Joven' ELSE 'Empleado Adulto'End

FROM empleado WHERE cod_empleado = @CodEmpEndELSEBegin

PRINT 'No existe el empleado con el codigo indicado..:'+Str(@CodEmp)RETURN -1

EndRETURN 0

b) Compilación del procedimiento: Seleccionar todo el procedimiento y luego pulse la tecla F5 para compilar y almacenarlo en el servidor de base de datos.

Si existen errores en la compilacion, corrige estos errores con la ayuda del profesor.

c) Ejecucion del procedimiento: Ahora debe probar si funciona correctamente, ejecutando lo siguiente

EXEC usp_BuscarEmpleado 7

Page 16: INFORME GUIAS SQL

RESULTADO:

2.3. EjemploS. Realice un procedimiento que permita devolver una listado de Clientes que pidieron un determinado producto y en el mes indicado por el usuario (Transferir estos datos como parámetros). Se debe obtener: Codigo del Cliente, Nombre del cliente, Fecha de pedido y la Precio unitario. El resultado debe estar ordenado por la fecha de pedido.

a) Creación del Procedimiento: Tipear el siguiente código.

CREATE PROCEDURE dbo.usp_PedidoClienteProducto@CodProd int,@Mes int = 1

ASSELECT Pedido.Cod_Cliente,Cliente.Nombre_Cliente,Detalle_pedido.Precio_por_unidadFROM Pedido

INNER JOIN ClienteON Pedido.Cod_cliente = Cliente.cod_cliente

INNER JOIN Detalle_PedidoON Pedido.Id_pedido = Detalle_pedido.Id_pedido

WHERE Detalle_Pedido.cod_producto = @CodProd AND Month(Pedido.Fecha_pedido) = @MesORDER BY Pedido.Fecha_pedido

RETURN 0

b) Compilación del procedimiento: Seleccionar todo el procedimiento y luego pulse la tecla F5 para compilar y almacenarlo en el servidor de base de datos.

Si existen errores, consulte a su profesor.

c) Ejecución del procedimiento: Ahora debe probar si funciona correctamente, ejecutando lo siguiente

Ahora ejecútelo. Por ejemplo para el producto que tiene código "1101" y en el mes de Febrero

EXEC usp_PedidoClienteProducto 1101,2

Page 17: INFORME GUIAS SQL

RESULTADO:

Ahora ejecute el procedimiento de otra forma. ¿Explique el resultado?

EXEC usp_PedidoClienteProducto 1101, DEFAULT

EXEC usp_PedidoClienteProducto 1101,DEFAULT

2.4. Ejemplo4. Crear un procedimiento almacenado similar al ejemplo2, pero ahora la información se debe retornar por parámetros OUTPUT.

a) Creación del Procedimiento: Tipear el siguiente codigo.

CREATE PROCEDURE dbo.usp_BuscarEmpleado2@CodEmp int = 0,@ApeNom varchar(40) OUTPUT,@TelEmp varchar(10) OUTPUT,@EdadEmp numeric(2) OUTPUT,@ObsEdad varchar(25) OUTPUT

ASIF Exists (SELECT cod_empleado FROM empleado WHERE cod_empleado = @CodEmp)Begin

SELECT @ApeNom = Apellidos + ', ' + Nombres,@TelEmp = Tfno_Particular,@EdadEmp = Year(GetDate())-Year(Fecha_Nacimiento),@ObsEdad = CASE WHEN Year(GetDate())-Year(Fecha_Nacimiento) < 18

THEN 'Es menor de edad' WHEN Year(GetDate())-Year(Fecha_Nacimiento) < 25

THEN 'Empleado Joven'ELSE 'Empleado Adulto'END

FROM empleado WHERE cod_empleado = @CodEmpEndELSEBegin

PRINT 'No existe el empleado con el codigo indicado..:' +Str(@CodEmp)RETURN -1

EndRETURN 0

Page 18: INFORME GUIAS SQL

b) Compilacion del procedimiento: Seleccionar todo el procedimiento y luego pulse la tecla F5 para compilar y almacenario en el servidor de base de datos.

Si existen errores, consulte a su profesor.

c) Ejecucion del procedimiento: Ahora debe probar si funciona correctamente, ejecutando lo siguiente.

Ahora ejecutelo.

DECLARE @ApeNom varchar(40),@Tel varchar(10)DECLARE @Edad numeric(2),@Obs varchar(25)

EXEC usp_BuscarEmpleado2 7,@ApeNom OUTPUT,@Tel OUTPUT,@Edad OUTPUT,@Obs OUTPUTSELECT @ApeNom as [Apellidos y Nombres],@Tel as Telefono,@Edad as Edad,@Obs as Observ

RESULTADO:

2.5 Ejercicios para ser realizado por el alumno.

a) Realice un procedimiento que permita mostrar los Productos solicitados por un determinado Cliente, solo se debe mostrar los productos donde la cantidad de pedido es menor a 3: Se debe obtener Código del producto, Fecha de pedido, Nombre del producto, precio unitario, Cantidad pedida.

b) Realice un procedimiento que muestre el total de clientes que piden cada producto en un determinado trimestre. Si el total de clientes de un producto es menor a 5 se debe mostrar en una columna de Observaciones el texto "Pocos Clientes", en otro caso esta columna debe mostrar "Muchos clientes"Sugerencia: puede usar Tablas Temporales o Físicas en la consulta. Consulte al profesor para más información.

c) Crear un procedimiento que permita agregar un nuevo registro en la tabla Comprobante de Pago. Los nuevos datos se deben transferir como parámetros. Se debe verificar si ocurrieron errores, es decir, debe comprobar si los campos de tipo FK tienen un valor valido para cumplir con la integridad referencial.

d) Crear un procedimiento que permita agregar un nuevo registro en la tabla Detalle de comprobante de pago. Los nuevos datos se deben transferir como parámetros. Se debe verificar si ocurrieron errores, es decir, debe comprobar si los campos de tipo FK tienen un valor valido para cumplir con la integridad referencial.

Page 19: INFORME GUIAS SQL

e) Crear un procedimiento que permita agregar un nuevo registro en la tabla Pedido. Los nuevos datos se deben transferir como parámetros. Se debe verificar si ocurrieron errores, es decir, debe comprobar si los campos de tipo FK tienen un valor valido para cumplir con la integridad referencial.

f) Realizar un procedimiento que permita eliminar todas las facturas que no tienen su correspondiente detalle.

g) Realice un procedimiento almacenado que permita modificar los datos de un determinado tipo de producto.

2.6 Por ultimo guardar todo y finalizamos la presente práctica. Ahora puede hacer la Tarea encargada.

Ill.-TAREA Encargada

Buscar en la ayuda de SQL Server todo lo referente a:

CREATE PROCEDURE

Crea un procedimiento almacenado Transact-SQL o Common Language Runtime (CLR) en SQL Server 2008 R2. Los procedimientos almacenados son similares a los procedimientos de otros lenguajes de programación en tanto que pueden:

o Aceptar parámetros de entrada y devolver varios valores en forma de parámetros de salida al lote o al procedimiento que realiza la llamada.

o Contener instrucciones de programación que realicen operaciones en la base de datos, incluidas las llamadas a otros procedimientos.

o Devolver un valor de estado a un lote o a un procedimiento que realice una llamada para indicar si la operación se ha realizado correctamente o se han producido errores, y el motivo de estos.

ALTER PROCEDURE

Modifica un procedimiento creado anteriormente por la ejecución de la instrucción CREATE PROCEDURE. ALTER PROCEDURE no cambia los permisos ni afecta a ningún procedimiento almacenado ni desencadenador dependientes. Sin embargo, la configuración de la sesión actual para QUOTED_IDENTIFIER y ANSI_NULLS se incluye en el procedimiento almacenado cuando se modifica. Si la configuración es distinta de la que se estaba aplicando cuando se creó originalmente el procedimiento almacenado, el comportamiento de este último puede cambiar.

EXECUTE

Ejecuta una cadena de comandos o una cadena de caracteres dentro de un proceso por lotes de Transact-SQL, o uno de los siguientes módulos: procedimiento almacenado del sistema, procedimiento almacenado definido por el usuario, función con valores escalares definida por el usuario o procedimiento almacenado extendido.

Page 20: INFORME GUIAS SQL

DROP PROCEDURE

Quita uno o más procedimientos almacenados o grupos de procedimientos de la base de datos actual.

Parámetros

Los parámetros se usan para intercambiar datos entre las funciones y los procedimientos almacenados y la aplicación o la herramienta que llamó a la función o al procedimiento almacenados:

o Los parámetros de entrada permiten a quien realiza la llamada pasar un valor de datos a la función o al procedimiento almacenado.

o Los parámetros de salida permiten al procedimiento almacenado devolver un valor de datos o variable de cursor a quien realizó la llamada. Las funciones definidas por el usuario no pueden especificar parámetros de salida.

o Cada procedimiento almacenado devuelve un código de retorno de tipo entero a quien realiza la llamada. Si el procedimiento almacenado no establece explícitamente un valor para el código de retorno, éste es 0.