Está en la página 1de 48

Curso de Anlisis de bases de Datos en SQL Server 2008

Universidad Nacional de Ingeniera


UNI - FEC Curso de Studio .NET - SQL SERVER 2008 Mdulo II.

Unidad IV: Implementando bases de datos y tablas. Consultas mediante el uso de Transact de SQL Server 2008. Procedimientos almacenados.

Prof. Giovanni Francisco Senz Araica.

Unidad IV.- Implementando bases de datos y tablas.

Giovanni.Saenz@uni.edu.ni Giovanni.Saenz@hotmail.com Giovanni.Saenz@yahoo.es Francisco.Araica@gmail.com

Curso de Anlisis de bases de Datos en SQL Server 2008

Tabla de Contenido:
Unidad IV: Implementando bases de datos y tablas............................................................1 Unidad IV: Implementando bases de datos y tablas............................................................4 CASO DE ESTUDIO DE TRANSACT-SQL RESUELTO:..........................................................4 CREACION DE LA BASE DE DATOS................................................................................... 5 ESTABLECER LAS TABLAS DE LA BASE DE DATOS............................................................5 Creacin de cada una de las tablas de la base de datos ventas e inventarios de un negocio:........................................................................................................................... 5 Tareas evaluadas:............................................................................................................. 15 Consultas........................................................................................................................... 17 SELECT........................................................................................................................... 17 WHERE........................................................................................................................... 18 ORDER BY...................................................................................................................... 18 Insert into - Values......................................................................................................... 20 UPDATE.......................................................................................................................... 20 DELETE........................................................................................................................... 21 PROCEDIMIENTOS ALMACENADOS.................................................................................... 23 Ejemplo #1: .................................................................................................................. 23 Ejecucin de tipo #1...................................................................................................... 23 Ejecucin de tipo #2...................................................................................................... 24 Ejemplo #2: .................................................................................................................. 24 Ejecucin de tipo #1...................................................................................................... 24 Ejecucin de tipo #2...................................................................................................... 25 Ejemplo #3: .................................................................................................................. 26 Ejecucin de tipo #1...................................................................................................... 26 Ejecucin de tipo #2...................................................................................................... 26 Tareas de procedimientos almacenados:..........................................................................27 Notas para la prxima sesin del curso:............................................................................27 Practicando consultas partes dos................................................................................... 28 Tarea: Intrprete que es lo que hace este bloque de programacin: ............................31
Unidad IV.- Implementando bases de datos y tablas. 2

Giovanni.Saenz@uni.edu.ni Giovanni.Saenz@hotmail.com Giovanni.Saenz@yahoo.es Francisco.Araica@gmail.com

Curso de Anlisis de bases de Datos en SQL Server 2008

Funciones en Transact SQL............................................................................................... 32 Ejecutar funciones definidas por el usuario (motor de base de datos)..............................32 Funciones escalares....................................................................................................... 32 Funciones en lnea......................................................................................................... 36 ....................................................................................................................................... 38 Funcin que retorna una Tabla Continuando con la base de datos NorthWind...........39 Igual que el ejemplo anterior, la forma para Correr la Funcion:.....................................40 Funciones en lnea de mltiples sentencias ..................................................................40 Otros ejemplos............................................................................................................... 42 Tareas de Funciones creadas por el usuario..................................................................46 Bibliografa adicional que puede consultar en internet..................................................46 SQL SERVER Llamar Funciones de la base de datos directamente ..........................47

Unidad IV.- Implementando bases de datos y tablas.

Giovanni.Saenz@uni.edu.ni Giovanni.Saenz@hotmail.com Giovanni.Saenz@yahoo.es Francisco.Araica@gmail.com

Curso de Anlisis de bases de Datos en SQL Server 2008

Unidad IV: Implementando bases de datos y tablas.


CASO DE ESTUDIO DE TRANSACT-SQL RESUELTO:
Una vez que se ha llegado hasta aqu, usted ha estudiando el material entregando en clase, se pone en prctica el uso del cdigo transact de SQL Server, as como tambien se dispone a desarrollar un ejemplo puntual, el cual consiste en tratar el control de las ventas e inventarios de un negicio pequeo , el modelo relacional con el que se trabajara, es el que se muestra a continuacion:

Unidad IV.- Implementando bases de datos y tablas.

Giovanni.Saenz@uni.edu.ni Giovanni.Saenz@hotmail.com Giovanni.Saenz@yahoo.es Francisco.Araica@gmail.com

Curso de Anlisis de bases de Datos en SQL Server 2008

CREACION DE LA BASE DE DATOS


CREATE DATABASE[Ventas e Inventario] GO Poner en uso la Base de Datos. Para que todo lo creado se Realice sobre la BD Ventas e Inventarios: USE [Ventas e Iventario] GO

ESTABLECER LAS TABLAS DE LA BASE DE DATOS


Para Implantar valores por defecto en los campos e integridad Referencial o relaciones entre tablas, a continuacion se detalla las instrucciones necesarias que usted debe utilizar: ALTER TABLE: Modifica una definicion de tabla al alterar, agregar o quitar columnas y restricciones, o al deshabilitar o habilitar restricciones y desencadenadores. CONSTRAINT: Especifica el comienzo de una restriccion PRIMARY KEY, UNIQUE, FOREIGN KEY o CHECK, o de una definicion DEFAULT. PRIMARY KEY: Es una restriccion que exige la integridad de entidad para una o varias columnas dadas a traves de un ndice nico. Solo se puede crear una restriccion PRIMARY KEY por cada tabla. CLUSTERED: Especifica que se ha creado un indice agrupado para la restriccion. PRIMARY KEY, FOREIGN KEYREFERENCES: Es una restriccion que proporciona integridad referencial a los datos de la columna. Las restricciones FOREIGN KEY requieren que cada valor de la columna exista en la columna especificada de la tabla a la que se hace referencia.

Creacin de cada una de las tablas de la base de datos ventas e inventarios


de un negocio:
Unidad IV.- Implementando bases de datos y tablas. 5

Giovanni.Saenz@uni.edu.ni Giovanni.Saenz@hotmail.com Giovanni.Saenz@yahoo.es Francisco.Araica@gmail.com

Curso de Anlisis de bases de Datos en SQL Server 2008

Tabla Cliente: CREATE TABLE Cliente( Cedula Varchar(20)COLLATE Modern_Spanish_CI_AS NOT NULL, Nombres Varchar(50)COLLATE Modern_Spanish_CI_AS NOT NULL, Apellidos Varchar(50)COLLATE Modern_Spanish_CI_AS NOT NULL, Telefono Varchar(20)COLLATE Modern_Spanish_CI_AS NOT NULL, Direccion Varchar(250)COLLATE Modern_Spanish_CI_AS NOT NULL, LimiteCredito Float NOT NULL, TotalCredito Float NOT NULL, Foto Varchar(250) NOT NULL, constraint PKCedula primary key(Cedula) )

Tabla Abonos: CREATE TABLE Abonos( IdAbono varchar(20)COLLATE Modern_Spanish_CI_AS NOT NULL, Cedula varchar(20)COLLATE Modern_Spanish_CI_AS NOT NULL, Abono Float NOT NULL, FechaAbono datetime NOT NULL, constraint PKIdAbono primary key(IdAbono), constraint FKCedula FOREIGN KEY(Cedula)references Cliente ) En la siguiente pgina observar como se ha creado la tabla de abonos.

Unidad IV.- Implementando bases de datos y tablas.

Giovanni.Saenz@uni.edu.ni Giovanni.Saenz@hotmail.com Giovanni.Saenz@yahoo.es Francisco.Araica@gmail.com

Curso de Anlisis de bases de Datos en SQL Server 2008

Tabla Proveedor: CREATE TABLE Proveedor( Idproveedor Varchar(20), NombreEmpresa Varchar(100), Direccion Varchar(150), Telefono Varchar(20), constraint PKIdproveedor primary key(Idproveedor) )

Unidad IV.- Implementando bases de datos y tablas.

Giovanni.Saenz@uni.edu.ni Giovanni.Saenz@hotmail.com Giovanni.Saenz@yahoo.es Francisco.Araica@gmail.com

Curso de Anlisis de bases de Datos en SQL Server 2008

Tabla Compras: CREATE TABLE Compras( IdCompras Varchar(20), IdProveedor Varchar(20), FechaCompras datetime, TotalCompras Float, Descuento Float, Impuesto Float, GranTotal Float, constraint PKIdCompras primary key(IdCompras), constraint FKIdproveedor FOREIGN KEY(Idproveedor)references Proveedor )

Unidad IV.- Implementando bases de datos y tablas.

Giovanni.Saenz@uni.edu.ni Giovanni.Saenz@hotmail.com Giovanni.Saenz@yahoo.es Francisco.Araica@gmail.com

Curso de Anlisis de bases de Datos en SQL Server 2008

Tabla Productos: CREATE TABLE Productos( IdProducto Varchar(20), IdCategoria Varchar(20), Producto Varchar(200), UnidadMedida Varchar(20), PVU Float, Existencias Float, TipoDeInventario Varchar(20), constraint PKIdProducto primary key(IdProducto ) )

Tabla DetalleCompra: CREATE TABLE DetalleCompra ( IdCompras Varchar(20), IdProducto Varchar(20), Cantidad Float, CVU Float, SubTotal Float, constraint FKIdCompras FOREIGN KEY(IdCompras)references Compras, constraint FK_IdProducto FOREIGN KEY(IdProducto)references Productos
Unidad IV.- Implementando bases de datos y tablas. 9

Giovanni.Saenz@uni.edu.ni Giovanni.Saenz@hotmail.com Giovanni.Saenz@yahoo.es Francisco.Araica@gmail.com

Curso de Anlisis de bases de Datos en SQL Server 2008

Tabla de Factura: CREATE TABLE Factura( IdFactura Varchar(20)COLLATE Modern_Spanish_CI_AS NOT NULL, Cedula Varchar(20)COLLATE Modern_Spanish_CI_AS NOT NULL, TipoDeVenta Varchar(20)COLLATE Modern_Spanish_CI_AS NOT NULL, FechaFactura datetime NOT NULL, TotalFactura Float NULL, Hora Varchar(10)COLLATE Modern_Spanish_CI_AS NULL, Activo bit NULL, constraint PKIdFactura primary key(IdFactura ), constraint FK_Cedula FOREIGN KEY(Cedula)references Cliente )

Unidad IV.- Implementando bases de datos y tablas.

10

Giovanni.Saenz@uni.edu.ni Giovanni.Saenz@hotmail.com Giovanni.Saenz@yahoo.es Francisco.Araica@gmail.com

Curso de Anlisis de bases de Datos en SQL Server 2008

Tabla de DetalleFactura: CREATE TABLE DetalleFactura( IdFactura Varchar(20)COLLATE Modern_Spanish_CI_AS NOT NULL, IdProducto Varchar(20), Cantidad Float NOT NULL, SubTotal Float NOT NULL constraint FKIdFactura FOREIGN KEY(IdFactura)references Factura, constraint FKIdProducto FOREIGN KEY(IdProducto)references Productos )

Unidad IV.- Implementando bases de datos y tablas.

11

Giovanni.Saenz@uni.edu.ni Giovanni.Saenz@hotmail.com Giovanni.Saenz@yahoo.es Francisco.Araica@gmail.com

Curso de Anlisis de bases de Datos en SQL Server 2008

Ahora proceda a crear el diagrama de la base de datos:

Lo primero que debe hacer es colocarse sobre la base de datos y en la opcin de diagrama, dar click derecho y especificar que desea un nuevo diagrama:

Al hacer click y ser activada la opcin de diagrama, le solicitara que seleccione las tablas, ver grafico en la siguiente pgina:
Unidad IV.- Implementando bases de datos y tablas. 12

Giovanni.Saenz@uni.edu.ni Giovanni.Saenz@hotmail.com Giovanni.Saenz@yahoo.es Francisco.Araica@gmail.com

Curso de Anlisis de bases de Datos en SQL Server 2008

Seleccione las tablas:

Seleccione todas las tablas:

Unidad IV.- Implementando bases de datos y tablas.

13

Giovanni.Saenz@uni.edu.ni Giovanni.Saenz@hotmail.com Giovanni.Saenz@yahoo.es Francisco.Araica@gmail.com

Curso de Anlisis de bases de Datos en SQL Server 2008

Debe presionar el botn cerrar:

A usted se le presentara el diagrama completo de la siguiente forma:

Unidad IV.- Implementando bases de datos y tablas.

14

Giovanni.Saenz@uni.edu.ni Giovanni.Saenz@hotmail.com Giovanni.Saenz@yahoo.es Francisco.Araica@gmail.com

Curso de Anlisis de bases de Datos en SQL Server 2008

Tareas evaluadas:
I.- Se deben realizar ciertos ajustes a las tablas, sin embargo, que significa lo siguiente: ALTER TABLE Abonos WITH NOCHECK ADD CONSTRAINT PK_Abonos PRIMARY KEY CLUSTERED(IdAbono) GO

ALTER TABLE Cliente WITH NOCHECK ADD CONSTRAINT Cliente_Telefono DEFAULT('No tiene') FOR Telefono, CONSTRAINT Cliente_LimiteCredito DEFAULT(0) FOR LimiteCredito, CONSTRAINT Cliente_TotalCredito DEFAULT(0) FOR TotalCredito, CONSTRAINT Llave_Cliente PRIMARY KEY CLUSTERED(Cedula) GO
Unidad IV.- Implementando bases de datos y tablas. 15

Giovanni.Saenz@uni.edu.ni Giovanni.Saenz@hotmail.com Giovanni.Saenz@yahoo.es Francisco.Araica@gmail.com

Curso de Anlisis de bases de Datos en SQL Server 2008

ALTER TABLE Compras WITH NOCHECK ADD CONSTRAINT Compras_TotalFactura DEFAULT(0)FOR TotalCompras, CONSTRAINT Compras_Descuento DEFAULT(0)FOR Descuento, CONSTRAINT Compras_Impuesto DEFAULT(0)FOR Impuesto, CONSTRAINT Compras_GranTotal DEFAULT(0)FOR GranTotal, CONSTRAINT Llave_Compras PRIMARY KEY CLUSTERED(IdCompras) GO

2.- Debe llenar cada una de las tablas con datos consistentes, es decir, datos entendibles, tales como nombre de productos reales. Cada tabla debe contener por lo menos de 15 a 25 registros. 3.- Se deben de crear las siguientes consultas: a.- Mostrar los productos por existencia y ordenados por el identificador. b.- Mostrar a todos los clientes con sus lmites de crditos, ordenados por el apellido. c.- Muestre cada una de las facturas del mes de septiembre, ordenadas en forma ascendente por la fecha de la facturacin. d.- Mostrar las compras que se han realizado, detallado el nombre del proveedor, as como la fecha en que se han realizado. El resto de consultas pendiente de la tarea, se asignaran la prxima semana.

Unidad IV.- Implementando bases de datos y tablas.

16

Giovanni.Saenz@uni.edu.ni Giovanni.Saenz@hotmail.com Giovanni.Saenz@yahoo.es Francisco.Araica@gmail.com

Curso de Anlisis de bases de Datos en SQL Server 2008

Consultas
SELECT
1.- Recuperar todos los datos: SELECT * FROM Productos

Tarea consulta #1: Ahora usted muestre los productos con su precio, existenci y tipo de
inventario.

2.- Recuperar todos los datos de nombre de producto, unidades de medida, precio de venta por unidad y existencia de la tabla producto: SELECT Producto, UnidadMedida,PVU,Existencias FROM dbo.Productos

Tarea consulta #2: usted presente en pantalla a los clientes con cada uno de sus
detalles con sus respectivos registros.

Unidad IV.- Implementando bases de datos y tablas.

17

Giovanni.Saenz@uni.edu.ni Giovanni.Saenz@hotmail.com Giovanni.Saenz@yahoo.es Francisco.Araica@gmail.com

Curso de Anlisis de bases de Datos en SQL Server 2008

WHERE
3.- Presentar los productos que tengan precio menor a 12.00 crdobas: SELECT Producto, UnidadMedida,PVU,Existencias FROM dbo.Productos WHERE PVU > 12.00

Tarea consulta #3: presente los productos que tienen en existencia una oscilacin entre
2000 a 5000 gramos en bodega. 4.- Presentar todos los productos que inicien con la letra A: SELECT Producto, UnidadMedida,PVU,Existencias FROM dbo.Productos WHERE Producto LIKE 'A%'

Tarea consulta #4:


1.- Presente en pantallalos productos que inician con las letras Az no importando lo que se sigue posteriormente. 2.- Muestre en pantalla los nombre de los productos que inician con cualquier letra, sin embargo la segunda es r y el resto no importa.

ORDER BY
5.- Ordenar los productos en orden ascendente segn el nombre del producto: SELECT Producto, UnidadMedida,PVU,Existencias FROM dbo.Productos ORDER BY Producto ASC

Unidad IV.- Implementando bases de datos y tablas.

18

Giovanni.Saenz@uni.edu.ni Giovanni.Saenz@hotmail.com Giovanni.Saenz@yahoo.es Francisco.Araica@gmail.com

Curso de Anlisis de bases de Datos en SQL Server 2008

Tarea consulta #5:


1.- Presente en pantalla los productos ordenados en forma ascendente segn el nombre del producto. 2.- Muestre en pantalla los nombre de los productos de forma descendente y el precio en forma ascendente. 6.- Presentar las facturas de las ventas realizadas en orden del total facturado en forma descendente: SELECT IdFactura, TipoDeVenta, FechaFactura,TotalFactura FROM dbo.Factura ORDER BY TotalFactura DESC

Tarea consulta #6:


1.- Presente en pantalla los productos ordenados en forma ascendente segn el nombre del producto. 2.- Muestre en pantalla los nombre de los productos de forma descendente y el precio en forma ascendente. 7.- Presentar en forma ascendente el nombre de producto y descendente la existencia de estos: SELECT Producto, UnidadMedida,PVU,Existencias FROM dbo.Productos ORDER BY Producto ASC, Existencias Desc

Unidad IV.- Implementando bases de datos y tablas.

19

Giovanni.Saenz@uni.edu.ni Giovanni.Saenz@hotmail.com Giovanni.Saenz@yahoo.es Francisco.Araica@gmail.com

Curso de Anlisis de bases de Datos en SQL Server 2008

Tarea consulta #7:


1.- Presente en pantalla todas las facturas en ordenados en forma ascendente segn el nmero de la cedula. 2.- Muestre en pantalla todas las facturas en ordenados en forma descendente segn el nmero de la cedula y ascendente el nmero de la factura.

Insert into - Values


8.- Insertar elementos en la tabla de Clientes: Insert into Cliente (Cedula,Nombres,Apellidos,Telefono,Direccion,TotalCredito,LimiteCredito) Values ('008-20081974-0008Z','Mara Mercedes','Ortez Lpez','86834499','La Trinidad, Calle central, casa #1990',250000,184990)

Tarea consulta #8:


Inserte de esta manera tres elementos en cada una de las tablas restantes , recuerde las llaves externas, para que estas funciones previamente tiene que existir un valor en la tabla a la cual pertenecen.

UPDATE
9.- Cambiar al cliente Giovanni Francisco Senz Araica su segundo apellido por senz: Select Cedula,Nombres,Apellidos From Cliente UPDATE Cliente SET Apellidos = 'Senz Senz' WHERE Apellidos = 'Senz Araica' AND Nombres = 'Giovanni Francisco' And Cedula = '00124121975-0009'
Unidad IV.- Implementando bases de datos y tablas. 20

Giovanni.Saenz@uni.edu.ni Giovanni.Saenz@hotmail.com Giovanni.Saenz@yahoo.es Francisco.Araica@gmail.com

Curso de Anlisis de bases de Datos en SQL Server 2008

/*** Visualizar el cambio de apellido en la Tabla. ***/ Select Cedula,Nombres,Apellidos From Cliente

Tarea consulta #9:


1.- Un que la actualizacin depende de ciertas circuntancias, debe prcticar la actualizacin o modificacin en por lo menos un elementos en cada una de las tablas restantes , recuerde las llaves externas, para que estas funciones previamente tiene que existir un valor en la tabla a la cual pertenecen. 2.- La cedula 001-24121975-0009 por error le falto agregar un carcter al final, el cual es X, muestres los pasos necesarios para poder hacer el cambio a 001-24121975-0009X.

DELETE
10.- Eliminar al Cliente Mara Mercedes Ortez Lpez: Select Cedula,Nombres,Apellidos From Cliente DELETE FROM Cliente WHERE Apellidos = 'Ortez Lpez' AND Nombres = 'Mara Mercedes' Select Nombres, Apellidos From Cliente

Unidad IV.- Implementando bases de datos y tablas.

21

Giovanni.Saenz@uni.edu.ni Giovanni.Saenz@hotmail.com Giovanni.Saenz@yahoo.es Francisco.Araica@gmail.com

Curso de Anlisis de bases de Datos en SQL Server 2008

Tarea consulta #10:


La eliminacion depende de ciertas circuntancias (en la practica no existe eliminacin, sino dar de baja o enviar a tabla expediente), debe realizar esta prctica, es decir, que usted mismo debe investigar y mostrar mediante instrucciones, que se debe realizar para dar de baja el registro de un producto o un cliente (pudiese ser que por algun motivo el producto no volvio entrar al pais, sin embargo, aparecio nuevamente a lo largo del tiempo lo mismo con un cliente que salio del pas con el tiempo hay que habilitarlo despus) su mision es mostrar en cada una de esas tablas por lo menos un registro de coomo solucionar este problema, recuerde las llaves externas, para que estas funciones previamente tiene que existir un valor en la tabla a la cual pertenecen.

Unidad IV.- Implementando bases de datos y tablas.

22

Giovanni.Saenz@uni.edu.ni Giovanni.Saenz@hotmail.com Giovanni.Saenz@yahoo.es Francisco.Araica@gmail.com

Curso de Anlisis de bases de Datos en SQL Server 2008

PROCEDIMIENTOS ALMACENADOS
Ejemplo #1:
-- Inicie con el Procedimiento Cliente: -- Hacer el ajuste a los datos para que pueda ser efectivo el cambio de los datos, sino, -- existiran problemas serios. @foto varchar(250) NULL alter Table dbo.Cliente alter Column Foto Varchar (100) Null -- Procedimiento almacenado para incoporar clientes en su respectiva tabla. Alter PROCEDURE SPGet_InsertarClientes @Cedula varchar(20), @Nombres Varchar(50), @Apellidos varchar(50), @Telefono varchar(20), @Direccion varchar(250), @TotalCredito float, @LimiteCredito float --@foto varchar(250) NULL AS Begin Insert into Cliente (cedula, Nombres, Apellidos, Telefono, Direccion, TotalCredito,LimiteCredito/*, Foto*/) Values(@cedula, @Nombres, @Apellidos, @Telefono, @Direccion, @TotalCredito, @LimiteCredito /*, @Foto*/) End

Ejecucin de tipo #1
-- Ejecutar el procedimiento almacenado, primera forma: USE [Ventas_ e _Inventario] GO DECLARE @return_value int

EXEC @return_value = [dbo].[SPGet_InsertarClientes] @Cedula = N'001-25051963-0007X', @Nombres = N'Francisco Donald', @Apellidos = N'Amrica Alcala', @Telefono = N'88614476', @Direccion = N'Praderas del Doral, Alameda #7, casa #173', @TotalCredito = 2500, @LimiteCredito = 184999
Unidad IV.- Implementando bases de datos y tablas. 23

Giovanni.Saenz@uni.edu.ni Giovanni.Saenz@hotmail.com Giovanni.Saenz@yahoo.es Francisco.Araica@gmail.com

Curso de Anlisis de bases de Datos en SQL Server 2008

SELECT GO

'Return Value' = @return_value

Ejecucin de tipo #2
-- Ejecutar el procedimiento almacenado, segunda forma: EXEC [dbo].[SPGet_InsertarClientes] '007-05041971-0008F', 'Eduardo Francisco', 'Navarro Arauz', '88940033', 'Mercado Guanuca, Calle central, casa #90', 250000, 1804990

Ejemplo #2:
-- Ahora con el Procedimiento para Factura: -- Insertar elementos en la tabla Factura: Create PROCEDURE SPGet_InsertarFactura @IdFactura varchar (20), @Cedula varchar(20), @TipoDeVenta Varchar(20), @FechaFactura datetime, @TotalFactura float, @Hora varchar(10), @activo bit --@Insertar elementos a la tabla Factura AS Begin Insert into Factura (IdFactura,Cedula,TipoDeVenta,FechaFactura,TotalFactura,Hora,activo) Values(@IdFactura,@Cedula,@TipoDeVenta,@FechaFactura,@TotalFactura,@Hora,@activ o) End

Ejecucin de tipo #1
-- Ejecutar el procedimiento almacenado, primera forma: USE [Ventas_ e _Inventario]
Unidad IV.- Implementando bases de datos y tablas. 24

Giovanni.Saenz@uni.edu.ni Giovanni.Saenz@hotmail.com Giovanni.Saenz@yahoo.es Francisco.Araica@gmail.com

Curso de Anlisis de bases de Datos en SQL Server 2008

GO DECLARE @return_value int EXEC @return_value = [dbo].[SPGet_InsertarFactura] @IdFactura = N'0002', @Cedula = N'001-24121975-0009', @TipoDeVenta = N'Productos de consumo', @FechaFactura = N'10-09-2011', @TotalFactura = 1099.99, @Hora = N'15:33', @activo = 'true' SELECT 'Return Value' = @return_value GO

Ejecucin de tipo #2
-- Ejecutar el procedimiento almacenado, segunda forma: EXECUTE [dbo].[SPGet_InsertarFactura] '0003', '001-24121975-0009', 'Productos de consumo', '10-09-2011', 996.99, '15:54', 'true'

-- Ejecutar el procedimiento almacenado, segunda forma: EXECUTE [dbo].[SPGet_InsertarFactura] '0006', '001-25081978-000F7', 'Productos de consumo', '24-09-2011', 3399.99, '06:31', 'true'

Ahora proceda a trabajar sobre la tabla Factura (completando usted los datos):

Unidad IV.- Implementando bases de datos y tablas.

25

Giovanni.Saenz@uni.edu.ni Giovanni.Saenz@hotmail.com Giovanni.Saenz@yahoo.es Francisco.Araica@gmail.com

Curso de Anlisis de bases de Datos en SQL Server 2008

Ejemplo #3:
-- Ahora con el Procedimiento para insertar elementos en la tabla Productos: -- Insertar elementos en la tabla Productos: CREATE PROCEDURE SPGet_InsertarProductos @IdProducto varchar(20), @IdCategoria varchar(20), @Producto varchar(20), @UnidadMedida varchar(20), @PVU float, @Existencias float, @TipoDeInventario varchar(20) AS INSERT Into Productos (IdProducto, IdCategoria, Producto, UnidadMedida, PVU, Existencias,TipoDeInventario) VALUES(@IdProducto, @IdCategoria, @Producto, @UnidadMedida, @PVU, @Existencias, @TipoDeInventario)

Ejecucin de tipo #1
-- Ejecutar el procedimiento almacenado, primera forma: USE [Ventas_ e _Inventario] GO DECLARE @return_value int

EXEC @return_value = [dbo].[SPGet_InsertarProductos] @IdProducto = N'007', @IdCategoria = N'001', @Producto = N'Azucar refinada San Antonio', @UnidadMedida = N'Gramos', @PVU = 11.99, @Existencias = 9000, @TipoDeInventario = N'Granos bsicos' SELECT GO 'Return Value' = @return_value

Ejecucin de tipo #2
-- Ejecutar el procedimiento almacenado, segunda forma: EXEC [dbo].[SPGet_InsertarProductos] '008', '001', 'Azucar sulfitada San Antonio',
Unidad IV.- Implementando bases de datos y tablas. 26

Giovanni.Saenz@uni.edu.ni Giovanni.Saenz@hotmail.com Giovanni.Saenz@yahoo.es Francisco.Araica@gmail.com

Curso de Anlisis de bases de Datos en SQL Server 2008

'Gramos', 8.57, 12000, 'Granos bsicos'

Para que funcione lo anterior, usted debe haber incorporado los datos de facturacin del cliente, por ejemplo:

Tareas de procedimientos almacenados:


Su misin es utilizar este mismo mtodo para llenar las tablas, as como para crear las instrucciones necesarias para realizar consultas a cada una de las tablas, por tal motivo, realizar: a.- Todos los procedimientos almacenas para insertar elementos en las tablas restantes. b.- Crear los procedimientos para modificar o actualizar los datos en cada una de las tablas que conforman la base de datos (recuerde resolver las tareas previas para que pueda realizar esta operacin).

Notas para la prxima sesin del curso:


Todas las tareas se deben realizar (hablando de las presente y de las anteriores) , ya que la prxima semana se realizara prueba escrita y prctica en la computadora (esto debido a que se ha acumulado material y hay que realizar las evaluaciones del aprendizaje correspondiente).
Unidad IV.- Implementando bases de datos y tablas. 27

Giovanni.Saenz@uni.edu.ni Giovanni.Saenz@hotmail.com Giovanni.Saenz@yahoo.es Francisco.Araica@gmail.com

Curso de Anlisis de bases de Datos en SQL Server 2008

Tambin se debe tener avanzado el proyecto, ya que este est dividido en cinco etapas y cada una tiene un valor del entre 50% a 70% del curso (si no se realiza esta parte, automticamente reprueba el mdulo II).

Practicando consultas partes dos


Se desea mostrar los nombre de los productos que su precio por unidad oscila entre 9.99 y 19.99, ordenarlos por precio por unidad de forma ascendente. Select producto, Pvu From productos Where pvu Between 9.99 and 19.99 ORDER BY pvu asc -- Siempre es adecuado mostrar el detalle de la tabla original: Select producto, Pvu From productos

En este momento, se necesita presentar en pantalla, los nombres de los clientes con su lmite de crdito y total de crdito, con el detalle, que se muestren nicamente, los clientes
Unidad IV.- Implementando bases de datos y tablas. 28

Giovanni.Saenz@uni.edu.ni Giovanni.Saenz@hotmail.com Giovanni.Saenz@yahoo.es Francisco.Araica@gmail.com

Curso de Anlisis de bases de Datos en SQL Server 2008

que cuentan con un lmite de crdito que tienen oscila entre 2000 y 3000. Ordenarlos por el nombre de los clientes en forma ascendente. Select Nombres, LimiteCredito, TotalCredito From Cliente Where TotalCredito Between 2000 and 30000 ORDER BY Nombres asc

Con respecto al caso anterior, ahora se le pide, que muestre todos los clientes que tienen crdito que se diferente al rango de 200 a 3000. Select Nombres, LimiteCredito, TotalCredito From Cliente Where TotalCredito Not Between 2000 and 30000 ORDER BY Nombres asc Mostrar los clientes por su nmero de cedula, nombre, limite de crdito y total de crdito que han facturado en tipo de venta de productos de consumo: Select Cedula, Nombres, LimiteCredito, TotalCredito From Cliente Where Cedula In (Select Cedula--,TipoDeVenta From dbo.Factura Where TipoDeVenta = 'Productos de consumo')

Mostrar los clientes que han facturado productos: Select Cedula, Nombres, LimiteCredito, TotalCredito From Cliente Where Cedula = Any (Select Cedula --,TipoDeVenta
Unidad IV.- Implementando bases de datos y tablas. 29

Giovanni.Saenz@uni.edu.ni Giovanni.Saenz@hotmail.com Giovanni.Saenz@yahoo.es Francisco.Araica@gmail.com

Curso de Anlisis de bases de Datos en SQL Server 2008

From dbo.Factura )

Observar el contenido de la tabla factura con respecto a la venta total de cada factura: Select IdFactura, TotalFactura As ventas From dbo.Factura Contar la cantidad de facturas que se han emitido en la base de datos: declare @factM Float Select @factM = Count(TotalFactura) From Factura Print @factM -- Tarea: muestre e incorpore un mensaje que expresa el resultado de la consulta, tal como: La cantidad de facturas es: el valor de la variable Encontrar la factura con el mayor valor de venta: declare @factM Float --Encontrar la factura con la mayor venta: Select @factM = MAX(TotalFactura) From Factura Print @factM --Tarea: Muestre el mensaje y el nombre del cliente de esa factura. --Encontrar la factura con la menor venta: declare @factM Float Select @factM = Min(TotalFactura) From Factura Print @factM --Tarea: Muestre el mensaje y el nombre del cliente de esa factura. --Encontrar el promedio de venta de la facturaemitidas: declare @factM Float Select @factM = AVG(TotalFactura) From Factura Print @factM --Tarea: Muestre el mensaje y el nombre del cliente de esa factura.

Unidad IV.- Implementando bases de datos y tablas.

30

Giovanni.Saenz@uni.edu.ni Giovanni.Saenz@hotmail.com Giovanni.Saenz@yahoo.es Francisco.Araica@gmail.com

Curso de Anlisis de bases de Datos en SQL Server 2008

Tarea: Intrprete que es lo que hace este bloque de programacin:

CREATE FUNCTION FncGet_Calcularsubtotaldetalleservicio (@IDProducto Varchar(20),@Cantidad Float) Returns Float AS Begin Declare @Subtotal Float Select @Subtotal = @Cantidad * PVU FROM Productos Where IDProducto = @IDProducto Return @Subtotal End Ejecucin de esta funcin: Select IdProducto, Pvu as UNIDADES, dbo.FncGet_Calcularsubtotaldetalleservicio(IdProducto, Pvu) as Resultado From Productos

Unidad IV.- Implementando bases de datos y tablas.

31

Giovanni.Saenz@uni.edu.ni Giovanni.Saenz@hotmail.com Giovanni.Saenz@yahoo.es Francisco.Araica@gmail.com

Curso de Anlisis de bases de Datos en SQL Server 2008

Funciones en Transact SQL Ejecutar funciones definidas por el usuario (motor de base de datos)
Las funciones definidas por el usuario se pueden invocar en consultas o en otras instrucciones o expresiones, como columnas calculadas o expresiones de cadena. Las funciones escalares se pueden ejecutar mediante la instruccin EXECUTE. Puede invocar una funcin definida por el usuario que devuelve un valor escalar en cualquier parte de una expresin escalar del mismo tipo de datos que se permite en las instrucciones Transact-SQL. Las funciones escalares deben invocarse como mnimo con el nombre de dos partes de la funcin. Para obtener ms informacin sobre los nombres con varias partes, vea Convenciones de sintaxis de Transact-SQL (Transact-SQL) . SQL Server proporciona al usuario la posibilidad de definir sus propias funciones, conocidas como UDF (user defined functions). Existen tres tipos de funciones. Estas son:

Funciones escalares. Funciones en lnea o retorno (o devuelven) un dato de tipo tabla. Funciones en lnea de mltiples sentencias

Funciones escalares
Las funciones escalares devuelven un nico valor de cualquier tipo de los datos tal como int, money, varchar, real, etc. La sintaxis para una funcin escalar es la siguiente: CREATE FUNCTION <Scalar_Function_Name, sysname, FunctionName> ( -- Lista de parmetros <@Param1, sysname, @p1> <Data_Type_For_Param1, , int>, ... ) -- Tipo de datos que devuelve la funcin. RETURNS <Function_Data_Type, ,int> AS BEGIN ... END
Unidad IV.- Implementando bases de datos y tablas. 32

Giovanni.Saenz@uni.edu.ni Giovanni.Saenz@hotmail.com Giovanni.Saenz@yahoo.es Francisco.Araica@gmail.com

Curso de Anlisis de bases de Datos en SQL Server 2008

El siguiente ejemplo muestra cmo crear una funcin escalar: CREATE FUNCTION fn_MultiplicaSaldo ( @NumCuenta VARCHAR(20), @Multiplicador DECIMAL(10,2) ) RETURNS DECIMAL(10,2) AS BEGIN DECLARE @Saldo DECIMAL(10,2), @Return DECIMAL(10,2) SELECT @Saldo = SALDO FROM CUENTAS WHERE NUMCUENTA = @NumCuenta SET @Return = @Saldo * @Multiplicador RETURN @Return END

Pueden ser utilizadas en cualquier sentencia Transact SQL. Un aspecto a tener en cuenta, es que para utilizar una funcin escalar debemos identificar el nombre de la funcin con el propietario de la misma. El siguiente ejemplo muestra cmo utilizar la funcin anteriormente creada en una sentencia Transact SQL. Un aspecto muy a tener en cuenta es que la funcin ejecutar sus sentencias SELECT una vez por cada fila del conjunto de resultados devuelto por la consulta SELECT principal. SELECT IDCUENTA, NUMCUENTA, SALDO, FXALTA, -- Ejecucin de la funcion: dbo.fn_MultiplicaSaldo( NUMCUENTA, IDCUENTA) AS RESULTADO FROM CUENTAS Las funciones escalares son muy similares a procedimientos almacenados con parmetros de salida, pero estas pueden ser utilizadas en consultas de seleccin y en la clausula where de las mismas.
Unidad IV.- Implementando bases de datos y tablas. 33

Giovanni.Saenz@uni.edu.ni Giovanni.Saenz@hotmail.com Giovanni.Saenz@yahoo.es Francisco.Araica@gmail.com

Curso de Anlisis de bases de Datos en SQL Server 2008

Las funciones no pueden ejecutar sentencias INSERT o UPDATE.

Alter FUNCTION fn_Trae_GramosProductos ( @NumCuenta VARCHAR(20), @Multiplicador DECIMAL(10,2) ) RETURNS DECIMAL(10,2) AS BEGIN DECLARE @Saldo DECIMAL(10,2), @Return DECIMAL(10,2) SELECT @Saldo = Existencias FROM Productos WHERE IdProducto = @NumCuenta SET @Return = @Saldo * @Multiplicador RETURN @Return END

SELECT IDProducto, PVU, UnidadMedida, Existencias, -- Ejecucin de la funcion: dbo.fn_Trae_GramosProductos(IdProducto, 2.45) AS RESULTADO FROM Productos
Unidad IV.- Implementando bases de datos y tablas. 34

Giovanni.Saenz@uni.edu.ni Giovanni.Saenz@hotmail.com Giovanni.Saenz@yahoo.es Francisco.Araica@gmail.com

Curso de Anlisis de bases de Datos en SQL Server 2008

En este caso, para el ejemplo que se est desarrollando, procesa a crear la siguiente funcin, donde podr ver los parmetros que se reciben, as como lo que retorna la funcin: alter FUNCTION fn_traslado_GramosALibrasXProductos ( @IdProductos varchar(20), @existencias float, @valor_medida_conversion float ) RETURNS float AS BEGIN DECLARE @valor_Convertido float--, --@Return float SELECT @existencias = existencias FROM Productos Where IDProducto = @IDProductos SET @valor_Convertido = @existencias * @valor_medida_conversion RETURN @valor_convertido END Ejecucin de la funcin: Select /*IdProducto, dbo.fn_Conversion_GramosALibrasXProductos producto, pvu, Existencia, fn_Conversion_GramosALibrasXProductos(existencia, 2.54)*/ existencias As [Valor en Gramos] , dbo.fn_traslado_GramosALibrasXProductos(IdProducto,Existencias, 2.54/1000) as [Cambio a Libras] From Productos

Ver resultado de la columna cambio a libras:

Unidad IV.- Implementando bases de datos y tablas.

35

Giovanni.Saenz@uni.edu.ni Giovanni.Saenz@hotmail.com Giovanni.Saenz@yahoo.es Francisco.Araica@gmail.com

Curso de Anlisis de bases de Datos en SQL Server 2008

Funciones en lnea
Las funciones en lnea son las funciones que devuelven un conjunto de resultados correspondientes a la ejecucin de una sentencia SELECT. La sintaxis para una funcin de tabla en lnea es la siguiente:

CREATE FUNCTION <Inline_Function_Name, sysname, FunctionName> ( -- Lista de parmetros <@param1, sysname, @p1> <Data_Type_For_Param1, , int>,... ) RETURNS TABLE AS RETURN ( -- Sentencia Transact SQL ) El siguiente ejemplo muestra cmo crear una funcin en lnea. CREATE FUNCTION fn_MovimientosCuenta ( @NumCuenta VARCHAR(20) ) RETURNS TABLE AS RETURN ( SELECT MOVIMIENTOS.*
Unidad IV.- Implementando bases de datos y tablas. 36

Giovanni.Saenz@uni.edu.ni Giovanni.Saenz@hotmail.com Giovanni.Saenz@yahoo.es Francisco.Araica@gmail.com

Curso de Anlisis de bases de Datos en SQL Server 2008

FROM MOVIMIENTOS INNER JOIN CUENTAS ON MOVIMIENTOS.IDCUENTA = CUENTAS.IDCUENTA WHERE CUENTAS.NUMCUENTA = @NumCuenta ) No se puede utilizar la clausula ORDER BY en la sentencia de una funcin el lnea. Las funciones en lnea pueden utilizarse dentro de joins o querys como si fueran una tabla normal.
SELECT * FROM fn_MovimientosCuenta('200700000001')

Ahora bien, llevando este caso a la prctica del ejemplo que se vincula con la base de datos que se est desarrollando en esta gua, proceda a escribirla en la ventana de consulta. Bsicamente lo que se busca aqu, es encontrar un cliente determinado y observar el total de las compras que ha realizado, esto en base a la informacin facturada. CREATE FUNCTION fn_Movimientos_Facturas ( @IdFactura VARCHAR(20) ) RETURNS TABLE AS RETURN ( SELECT dbo.Factura.IdFactura, dbo.Cliente.Cedula, dbo.Cliente.Nombres, dbo.Cliente.Apellidos, dbo.Factura.TipoDeVenta, dbo.Factura.TotalFactura FROM dbo.Factura INNER JOIN dbo.Cliente ON dbo.Factura.Cedula = dbo.Cliente.Cedula WHERE dbo.Factura.Cedula= @IdFactura --'001-25081978-000F7' ) Al crear la funcin, usted podr observar que est se ha agregado como parte de funciones que retornan tablas dentro de la parte de programacin de la base de datos que se est desarrollando en este momento:
Unidad IV.- Implementando bases de datos y tablas. 37

Giovanni.Saenz@uni.edu.ni Giovanni.Saenz@hotmail.com Giovanni.Saenz@yahoo.es Francisco.Araica@gmail.com

Curso de Anlisis de bases de Datos en SQL Server 2008

La manera en que se invoca a la funcin, se muestra a continuacin (recuerde pasar como parmetro un nmero de cedula valido y que exista dentro de los clientes que ya han emitido o realizado compras): SELECT * FROM fn_Movimientos_Facturas ('001-25081978-000F7')

Su equivalente en consulta es: SELECT dbo.Factura.IdFactura, dbo.Cliente.Cedula, dbo.Cliente.Nombres, dbo.Cliente.Apellidos, dbo.Factura.TipoDeVenta, dbo.Factura.TotalFactura FROM dbo.Factura INNER JOIN dbo.Cliente ON dbo.Factura.Cedula = dbo.Cliente.Cedula WHERE dbo.Factura.Cedula= '001-25081978-000F7' Es importante sealar la diferencia, en el primer caso tendr el control de cualquier cliente solo por el nmero de la cedula para encontrar el valor de las productos facturados. Mientras que en el segundo caso, es una consulta, la cual posteriormente debe invocar y hacer el ajuste constantemente (adems de recordar guardarla en algn lugar):
Unidad IV.- Implementando bases de datos y tablas. 38

Giovanni.Saenz@uni.edu.ni Giovanni.Saenz@hotmail.com Giovanni.Saenz@yahoo.es Francisco.Araica@gmail.com

Curso de Anlisis de bases de Datos en SQL Server 2008

Corriendo ambas instrucciones y siendo mostrado el resultado es:

Resultado de una funcin lineal, en este caso se muestra de donde se genera la consulta.

Funcin que retorna una Tabla Continuando con la base de datos NorthWind
A diferencia del tipo de funcin escalar (caso anterior), aqu se retorna una tabla, la cual mostrara dos campos CategoryId y CategoryN. Lo interesante de este tipo de funcion es el trato que se le da a los datos. CREATE FUNCTION [dbo].[FncGetCategoriasLineal2] ( @categoria nvarchar(15) ) RETURNS TABLE Return (select CategoryId, CategoryName From Categories where CategoryName = @categoria)

Unidad IV.- Implementando bases de datos y tablas.

39

Giovanni.Saenz@uni.edu.ni Giovanni.Saenz@hotmail.com Giovanni.Saenz@yahoo.es Francisco.Araica@gmail.com

Curso de Anlisis de bases de Datos en SQL Server 2008

Igual que el ejemplo anterior, la forma para Correr la Funcion:


La forma de ejecucion es como una consulta, donde se usa la palabra Select, luego las columnas que desea visualizar, despues From y entre corchetes la base de datos, el objeto y nombre de la funcion, como en este caso existe parametro, este debe ir entre parentesis, ver a continuacion: SELECT * FROM [Northwin].[dbo].[FncGetCategoriasLineal2] ('Confections')

Funciones en lnea de mltiples sentencias


Las funciones en lnea de mltiples sentencias son similares a las funciones en lnea excepto que el conjunto de resultados que devuelven puede estar compuesto por la ejecucin de varias consultas SELECT. Este tipo de funcin se usa en situaciones donde se requiere una mayor lgica de proceso. La sintaxis para unas funciones de tabla de multi sentencias es la siguiente: CREATE FUNCTION <Table_Function_Name, sysname, FunctionName> ( -- Lista de parmetros <@param1, sysname, @p1> <data_type_for_param1, , int>, ... ) RETURNS -- variable de tipo tabla y su estructura <@Table_Variable_Name, sysname, @Table_Var> TABLE ( <Column_1, sysname, c1> <Data_Type_For_Column1, , int>, <Column_2, sysname, c2> <Data_Type_For_Column2, , int>
Unidad IV.- Implementando bases de datos y tablas. 40

Giovanni.Saenz@uni.edu.ni Giovanni.Saenz@hotmail.com Giovanni.Saenz@yahoo.es Francisco.Araica@gmail.com

Curso de Anlisis de bases de Datos en SQL Server 2008

) AS BEGIN -- Sentencias que cargan de datos la tabla declarada RETURN END El siguiente ejemplo muestra el uso de una funcin de tabla de multi sentencias. /* Esta funcin busca la tres cuentas con mayor saldo * y obtiene los tres ltimos movimientos de cada una * de estas cuentas */ CREATE FUNCTION fn_CuentaMovimietos() RETURNS @datos TABLE ( -- Estructura de la tabla que devuelve la funcion. NumCuenta varchar(20), Saldo decimal(10,2), Saldo_anterior decimal(10,2), Saldo_posterior decimal(10,2), Importe_Movimiento decimal(10,2), FxMovimiento datetime ) AS BEGIN -- Variables necesarias para la lgica de la funcion. DECLARE @idcuenta int, @numcuenta varchar(20), @saldo decimal(10,2) -- Cursor con las 3 cuentas de mayor saldo DECLARE CDATOS CURSOR FOR SELECT TOP 3 IDCUENTA, NUMCUENTA, SALDO FROM CUENTAS ORDER BY SALDO DESC OPEN CDATOS FETCH CDATOS INTO @idcuenta, @numcuenta, @saldo -- Recorremos el cursor WHILE (@@FETCH_STATUS = 0) BEGIN -- Insertamos la cuenta en la variable de salida INSERT INTO @datos (NumCuenta, Saldo)
Unidad IV.- Implementando bases de datos y tablas. 41

Giovanni.Saenz@uni.edu.ni Giovanni.Saenz@hotmail.com Giovanni.Saenz@yahoo.es Francisco.Araica@gmail.com

Curso de Anlisis de bases de Datos en SQL Server 2008

VALUES (@numcuenta, @saldo) -- Insertamos los tres ltimos movimientos de la cuenta INSERT INTO @datos (Saldo_anterior, Saldo_posterior, Importe_Movimiento, FxMovimiento ) SELECT TOP 3 SALDO_ANTERIOR, SALDO_POSTERIOR, IMPORTE, FXMOVIMIENTO FROM MOVIMIENTOS WHERE IDCUENTA = @idcuenta ORDER BY FXMOVIMIENTO DESC -- Vamos a la siguiente cuenta FETCH CDATOS INTO @idcuenta, @numcuenta, @saldo END CLOSE CDATOS; DEALLOCATE CDATOS;

RETURN END Para ejecutar la funcin:

select * from fn_CuentaMovimietos() Y el resultado obtenido:

Otros ejemplos
Unidad IV.- Implementando bases de datos y tablas. 42

Giovanni.Saenz@uni.edu.ni Giovanni.Saenz@hotmail.com Giovanni.Saenz@yahoo.es Francisco.Araica@gmail.com

Curso de Anlisis de bases de Datos en SQL Server 2008

Es necesario crear una funcin que sea capaz de poder cambiar el campo de regin que aparezca como NULL y en vez de estos, se muestre como valor no aplica en la tabla de Employees de la base de datos Northwind: USE Northwind --Solucin al problema GO CREATE FUNCTION fn_NewRegion (@myinput nvarchar(30)) RETURNS nvarchar(30) BEGIN IF @myinput IS NULL SET @myinput = 'No Aplica' RETURN @myinput END

Ejecucion de la funcion fn_NewRegion SELECT LastName, City, dbo.fn_NewRegion(Region) AS Region, Country FROM dbo.Employees Resultado en pantalla:

Unidad IV.- Implementando bases de datos y tablas.

43

Giovanni.Saenz@uni.edu.ni Giovanni.Saenz@hotmail.com Giovanni.Saenz@yahoo.es Francisco.Araica@gmail.com

Curso de Anlisis de bases de Datos en SQL Server 2008

Ahora se requiere poder controlar el formato de la fecha, es decir, programar que aparezca separado el mes, da y ao por dos puntos, crear la funcin capaz de hacer esto en SQL Server: USE Northwind GO CREATE FUNCTION fn_DateFormat (@indate datetime, @separator char(1)) RETURNS Nchar(20) AS BEGIN RETURN CONVERT(Nvarchar(20), datepart(mm,@indate)) + @separator + CONVERT(Nvarchar(20), datepart(dd, @indate)) + @separator + CONVERT(Nvarchar(20), datepart(yy, @indate)) END Ejecucion de la funcion fn_NewRegion SELECT dbo.fn_DateFormat(GETDATE(), ':')
Unidad IV.- Implementando bases de datos y tablas. 44

Giovanni.Saenz@uni.edu.ni Giovanni.Saenz@hotmail.com Giovanni.Saenz@yahoo.es Francisco.Araica@gmail.com

Curso de Anlisis de bases de Datos en SQL Server 2008

Unidad IV.- Implementando bases de datos y tablas.

45

Giovanni.Saenz@uni.edu.ni Giovanni.Saenz@hotmail.com Giovanni.Saenz@yahoo.es Francisco.Araica@gmail.com

Curso de Anlisis de bases de Datos en SQL Server 2008

Tareas de Funciones creadas por el usuario


A continuacin se detallan varias funciones que usted debe desarrollar para la base de datos Inventario y ventas, las cuales valen puntos acumulados, as como nota. Debe de mostrar sus habilidades, as como la destreza para resolver cada uno de los problemas que se le plantean, solo usted puede desarrollar la habilidad para adquirir el conocimiento. En caso de tener problemas, se puede auxiliar de textos e informacin de internet, el lmite del conocimiento usted lo establece. 1. Se debe crear una funcin que pueda recibir como parmetros el nombre de un cliente, la cedula, as como las facturas de las compras realizadas , el nombre que recibir la funcin es Fnc_Facturas_Cliente_SumaTotal. Su misin es mostrar en detalle, la suma total de cada una de las facturas de los clientes , es decir, retornar un escalar con el monto total de lo facturado histrico de ese cliente. 2. A diferencia del inciso anterior , aqu usted debe poder recibir los mismos parmetros de la funcin anterior que tendr como nombre Fnc_Facturas_Cliente_Tabla, sin embargo lo que retornara es una tabla con todas las facturas del cliente. Debe tener cuidado en crear las instrucciones necesarias para mostrar en pantalla el retorno de esa tabla (todas las facturas de ese cliente y como valor agregado mostrar a cuento asciende lo facturado, es decir, crear a lo interno de la funcin el clculo de esos valores de forma local). 3. Crear una funcin que muestre todos los tipos de azcar que se encuentran almacenados, as como el precio, la cantidad de gramos y esta debe ser retornado como tabla. El nombre de la funcin es FnC_Productos_Azucar_Inventario.

Bibliografa adicional que puede consultar en internet


Encontrara informacin sobre la creacin de funciones: http://www.neuronasoft.net/2010/02/sql-server-llamar-funciones-de-la-base.html Funciones creadas por el usuario de Microsoft: http://msdn.microsoft.com/es-es/library/ms175562.aspx

Unidad IV.- Implementando bases de datos y tablas.

46

Giovanni.Saenz@uni.edu.ni Giovanni.Saenz@hotmail.com Giovanni.Saenz@yahoo.es Francisco.Araica@gmail.com

Curso de Anlisis de bases de Datos en SQL Server 2008

Ejemplos de funciones, lo que puede encontrar en los sitios de referencia descrito anteriormente: http://www.devjoker.com/contenidos/catss/239/Funciones-en-Transact-SQL.aspx Ver esta pgina: http://www.sqlserverya.com.ar/temarios/descripcion.php?cod=141&punto=135

Funcin escalar
CREATE FUNCTION [ nombrePropietario. ] nombreFuncin ( [ { @nombreParmetro tipoDatosParmetroEscalar [ = predeterminado ] } [ ,...n ] ] ) RETURNS tipoDatosDevolucinEscalar [ WITH < opcinFuncin > [,...n] ] [ AS ] BEGIN cuerpoFuncin RETURN expresinEscalar END

http://www.mygnet.net/manuales/sqlserver//funciones_definidas_por_el_usuario.1084

SQL SERVER Llamar Funciones de la base de datos directamente


Hasta que me lo preguntaron, me dijeron: Yo s que las funciones definidas por el usuario (en adelante UDF) han sido creadas para encapsular funcionalidades y para que al ser llamadas desde un procedimiento almacenado (en adelante SP), simplifiquen el armado y entendimiento de las sentencias t-sql que finalmente terminan siendo los SP. Pero, pero, pero (continuaban):Se puede llamar una UDF directamente? osea, sin necesidad de usarla desde un SP? La razn que argumentaban era que queran testear las funciones y se vean en la engorrosa necesidad de meterla en un SP cada vez que queran testear la funcin. Mi respuesta fue: hmmm de poder se puede, y sera as: 1.- Creen una UDF, digamos algo como esto CREATE FUNCTION [dbo].[risk_user_GetDescription] (@userid int) RETURNS varchar(150) AS BEGIN RETURN (
Unidad IV.- Implementando bases de datos y tablas. 47

Giovanni.Saenz@uni.edu.ni Giovanni.Saenz@hotmail.com Giovanni.Saenz@yahoo.es Francisco.Araica@gmail.com

Curso de Anlisis de bases de Datos en SQL Server 2008

SELECT [FirstName] + ' ' + [LastName]) FROM [dbo].[risk_user] WHERE [userid] = @userid ) END Esta UDF es muy senclla: simplemente devuelve el nombre de un usuario, recibiendo como parmetro el ID de usuario. 2.- Ahora, cmo lo llamo directamente? Si estn en el SQL SERVER Management Studio, simplemente presionen el botn Nueva consulta y tipeen SELECT [dbo].[risk_user_GetDescription](1) Luego presionen F5 para que se ejecute la consulta. Vern que se originan resultados. Si se dan cuenta, es muy simple: slo aad un SELECT antes del nombre de la UDF y al final simplemente le pas el parmetro que requiere la funcin. Si quisieras hacer lo mismo ( llamar una UDF directamente ) desde el Visual Studio, tambin se puede. Simplemente haras esto:
Dim connection As New SqlConnection("server=.\SQLEXPRESS;database=midatabase;uid=sa;pwd=") Dim command As New SqlCommand("SELECT [dbo].[risk_user_GetDescription](1)", connection) command.CommandType = CommandType.Text connection.Open() Dim NombreDeUsuario As String = DirectCast(command.ExecuteScalar(), String) connection.Close()

Lo que hace este cdigo es llamar a la UDF directamente, y la variable NombreDeUsuario es la que recibe el resultado. Yo he hecho el ejemplo con una funcin que devuelve un string, les dejo como tarea a Uds el que traten con funciones que devuelven otros tipos de datos. ;)

Unidad IV.- Implementando bases de datos y tablas.

48

Giovanni.Saenz@uni.edu.ni Giovanni.Saenz@hotmail.com Giovanni.Saenz@yahoo.es Francisco.Araica@gmail.com