Está en la página 1de 76

Desarrollo Aplicaciones con SQL Server 2005

Introduccin a:

Ing. Bernardo Robelo


Email: bernardo.robelo@gmail.com

AGENDA TRANSACT - SQL INDICES INTEGRIDAD DE DATOS

VISTAS
PROCEDIMIENTOS FUNCIONES DE USUARIO TRIGGERS CURSORES
Ing. BARJ - 2008

Transact-SQL Que es?

Ing. BARJ 2008

Transact-SQL
Lenguaje de Definicin De Datos

Ing. BARJ 2008

Tipos de datos del sistema


Numrico
Entero Numrico exacto Numrico aproximado Moneda

Fecha y hora Carcter y caracteres Unicode Binario Otros

Ing. BARJ IST UPOLI - 2008

Tipos de datos definidos por el usuario

Qu son ? Par que se utilizan?

Ing. BARJ IST UPOLI - 2008

Tipos de datos definidos por el usuario


Los tipos de datos definidos por el usuario estn basados en los tipos de datos disponibles a travs de SQL Server 2005.
Los tipos de datos definidos por el usuario se pueden emplear para asegurar que un dato tenga las mismas caractersticas sobre mltiples tablas.

Ing. BARJ IST UPOLI - 2008

Implementacin de la integridad de datos

Ing. BARJ IST UPOLI - 2008

Que es la integridad de datos?

Ing. BARJ IST UPOLI - 2008

Tipos de integridad de datos


Integridad de dominio
(columnas)

Integridad de entidad (filas)

Integridad referencial
(entre tablas)
Ing. BARJ IST UPOLI - 2008

Exigir integridad de los datos


Integridad de datos declarativa
Los criterios se definen en la definicin del objeto Asegurada automticamente por SQL Server Implementada mediante restricciones, valores predeterminados y reglas

Integridad de datos procedimental


Los criterios se definen en una secuencia de comandos Asegurada mediante secuencia de comandos Implementada mediante desencadenadores y procedimientos almacenados

Ing. BARJ IST UPOLI - 2008

Integridad de datos

Ing. BARJ IST UPOLI - 2008

Determinacin del tipo de restriccin que se va a utilizar


Tipo de integridad Dominio Tipo de restriccin DEFAULT CHECK REFERENTIAL PRIMARY KEY UNIQUE FOREIGN KEY CHECK

Entidad
Referencial

Ing. BARJ IST UPOLI - 2008

Tipos de restricciones
Restricciones DEFAULT Restricciones CHECK Restricciones PRIMARY KEY Restricciones UNIQUE Restricciones FOREIGN KEY Integridad referencial en cascada

Qu es un Indice

Ing. BARJ IST UPOLI - 2008

Tipos de Indice
CLUSTERED INDEX
Por Defecto se crean indices con las Llaves Primarias Son como capitulos en el Libro Indice como la guia telefonica Mantiene juntas los numeros de Lineas

NON-CLUSTERED INDEX
Son como guiones para acceder a los datos Utilizado en llaves de varios campos Es el Indice o Glosario Son Atajos para acceder a los Datos

Ing. BARJ IST UPOLI - 2008

Qu es una Vista?

Ing. BARJ IST UPOLI - 2008

Introduccin a las vistas


Employees
EmployeeID 1 2 3 LastName Davolio Fuller Leverling Firstname Nancy Andrew Janet Title ~~~ ~~~ ~~~
USE Northwind GO CREATE VIEW dbo.EmployeeView AS SELECT LastName, Firstname FROM Employees

EmployeeView
Lastname Davolio Fuller Leverling Firstname Nancy Andrew Janet
Ing. BARJ IST UPOLI - 2008

Vista del usuario

Ventajas de las vistas


Centrar el inters en los datos de los usuarios
Centrarse slo en los datos importantes o adecuados Limitar el acceso a los datos confidenciales

Enmascarar la complejidad de la base de datos


Ocultar el diseo de la base de datos compleja Simplificar las consultas complejas, incluyendo las consultas distribuidas a datos heterogneos

Simplificar la administracin de los permisos de usuario Mejorar el rendimiento Organizar los datos para exportarse a otras aplicaciones

Ing. BARJ IST UPOLI - 2008

Ejemplo: Vista de tablas combinadas


Orders
OrderID 10663 10827 10427 10451 10515

Customers
CustomerID CompanyName
BONAP PICCO QUICK

CustomerID RequiredDate ShippedDate


BONAP BONAP PICCO QUICK QUICK 1997-09-24 ~~~ 1998-01-26 ~~~ 1997-02-24 ~~~ 1997-03-05 ~~~ 1997-05-07 ~~~ 1997-10-03 1998-02-06 1997-03-03 1997-03-12 1997-05-23

ContactName

Bon app' Laurence Lebihan Piccolo und mehr Georg Pipps QUICK-Stop Horst Kloss

USE Northwind GO CREATE VIEW dbo.ShipStatusView AS SELECT OrderID, ShippedDate, ContactName FROM Customers c INNER JOIN Orders o ON c.CustomerID = O.CustomerID WHERE RequiredDate < ShippedDate

ShipStatusView
OrderID ShippedDate ContactName
10264 10271 10280 1996-08-23 Laurence Lebihan 1996-08-21 1996-08-30 Georg Pipps 1996-08-29 1996-09-12 Horst Kloss 1996-09-11

Ing. BARJ IST UPOLI - 2008

Uso de vistas para dividir datos


Puede utilizar las vistas para dividir los datos en varios servidores o instancias de SQL Server Cmo utiliza SQL Server las vistas para dividir datos Cmo las vistas divididas mejoran el rendimiento NO SE PUEDE
No se puede incluir la clusula ORDER BY No se puede incluir la palabra clave INTO

Ing. BARJ IST UPOLI - 2008

Prctica: Implementacin de vistas

Ing. BARJ IST UPOLI - 2008

Prctica: Implementacin de vistas

Ing. BARJ IST UPOLI - 2008

Qu es un procedimiento almacenado?

Ing. BARJ IST UPOLI - 2008

Definicin de procedimientos almacenados


Colecciones con nombre de instrucciones Transact-SQL Encapsulado de tareas repetitivas Aceptar parmetros de entrada y devolver valores

Ing. BARJ IST UPOLI - 2008

Ventajas de los procedimientos almacenados


Compartir la lgica de la aplicacin Exposicin de los detalles de las tablas de la base de datos Proporcionar mecanismos de seguridad Mejorar el rendimiento Reducir el trfico de red

Ing. BARJ IST UPOLI - 2008

Creacin de procedimientos almacenados


Utilice la instruccin CREATE PROCEDURE para crearlos en la base de datos activa

USE Northwind GO CREATE PROC dbo.OverdueOrders AS SELECT * FROM dbo.Orders WHERE RequiredDate niveles Puede anidar hasta 32 < GETDATE() AND ShippedDate IS Null GO Use sp_help para mostrar informacin

Ing. BARJ IST UPOLI - 2008

Ejecucin de procedimientos almacenados


Ejecucin de un procedimiento almacenado por separado
EXEC OverdueOrders

Ejecucin de un procedimiento almacenado en una instruccin INSERT


INSERT INTO Customers EXEC EmployeeCustomer

Ing. BARJ IST UPOLI - 2008

Ejecucin de procedimientos
Paso de valores por el nombre del parmetro
EXEC AddCustomer @CustomerID = 'ALFKI', @ContactName = 'Maria Anders', @CompanyName = 'Alfreds Futterkiste', @ContactTitle = 'Sales Representative', @Address = 'Obere Str. 57', @City = 'Berlin', @PostalCode = '12209', @Country = 'Germany', @Phone = '030-0074321'

Paso de valores por posicin


EXEC AddCustomer 'ALFKI2', 'Alfreds Futterkiste', 'Maria Anders', 'Sales Representative', 'Obere Str. 57', 'Berlin', NULL, '12209', 'Germany', '030-0074321'
Ing. BARJ IST UPOLI - 2008

Devolucin de valores mediante parmetros de salida


Creacin del procedimiento almacenado
CREATE PROCEDURE dbo.mathtutor @m1 smallint, @m2 smallint, @result smallint OUTPUT AS SET @result = @m1* @m2 GO DECLARE @answer smallint EXECUTE mathtutor 5, 6, @answer OUTPUT SELECT 'The result is: ' , @answer

Ejecucin del procedimiento almacenado

Resultados del procedimiento almacenado

The result is:

30

Ing. BARJ IST UPOLI - 2008

Control de mensajes de error


La instruccin RETURN sale incondicionalmente de una consulta o procedimiento

Ing. BARJ IST UPOLI - 2008

Prctica Procedimientos Almacenados

Ing. BARJ IST UPOLI - 2008

PROCEDIMIENTOS CON PARMETROS

Ing. BARJ IST UPOLI - 2008

PROCEDIMIENTOS ALMACENADOS CON PARMETROS CON VALORES POR DEFECTO

Ing. BARJ IST UPOLI - 2008

PROCEDIMIENTOS ALMACENADOS CON PARMETROS CON VALORES POR DEFECTO

Ing. BARJ IST UPOLI - 2008

PROCEDIMIENTOS ALMACENADOS CON PARMETROS CON VALORES POR DEFECTO

Ing. BARJ IST UPOLI - 2008

Ing. BARJ IST UPOLI - 2008

VARIABLES DE SALIDA EN PROCEDIMIENTOS ALMACENADOS

Ing. BARJ IST UPOLI - 2008

VARIABLES DE SALIDA EN PROCEDIMIENTOS ALMACENADOS

Ing. BARJ IST UPOLI - 2008

Ejemplos

Ing. BARJ IST UPOLI - 2008

Ejemplos

Ing. BARJ IST UPOLI - 2008

Qu es una funcin definida por el usuario?

Ing. BARJ IST UPOLI - 2008

Qu es una funcin definida por el usuario?


Una funcin de usuario, se crea con el fin de automatizar una consulta que se realiza a menudo. Funciones escalares
Similar a una funcin integrada

Funciones con valores de tabla de varias instrucciones


Contenido como un procedimiento almacenado Se hace referencia como una vista

Funciones con valores de tabla en lnea


Similar a una vista con parmetros Devuelve una tabla como el resultado de una instruccin SELECT nica

Ing. BARJ IST UPOLI - 2008

Uso de una funcin escalar definida por el usuario


La clusula RETURNS especifica el tipo de datos La funcin se define en un bloque BEGIN y END El tipo de devolucin puede ser cualquier tipo de datos, excepto text, ntext, image, cursor o timestamp

Ing. BARJ IST UPOLI - 2008

Demostracion: Creacin de funciones definidas por el usuario

Ing. BARJ IST UPOLI - 2008

FUNCIONES DEFINIDAS POR EL USUARIO


Declare Table

Ing. BARJ IST UPOLI - 2008

Funciones Escalares

Veamos en el Enteprise Manager, la funcion creada, consultamos el apartado Funciones definidas por el usuario

Ing. BARJ IST UPOLI - 2008

Funciones de Tablas en Linea

Ing. BARJ IST UPOLI - 2008

Funciones de Tablas Con Instrucciones

Ing. BARJ IST UPOLI - 2008

Funciones con Definicion de Esquema

Ing. BARJ IST UPOLI - 2008

Prctica: Creacin de funciones definidas por el usuario

Ing. BARJ IST UPOLI - 2008

Ejercicios

Ver Solucin

Ing. BARJ IST UPOLI - 2008

Ejercicios

Solucin

Ing. BARJ IST UPOLI - 2008

Ejercicios

Ing. BARJ IST UPOLI - 2008

Ejercicios

Ing. BARJ IST UPOLI - 2008

Que es un TRIGGER? (DESENCADENADORES, DISPARADORES)

Ing. BARJ IST UPOLI - 2008

Qu es un desencadenador?
Un desencadenador es una clase especial de procedimiento almacenado que se ejecuta siempre que se intenta modificar los datos de una tabla que el desencadenador protege. Asociacin a una tabla Invocacin automtica Imposibilidad de llamada directa Identificacin con una transaccin

Ing. BARJ IST UPOLI - 2008

Consideraciones acerca del uso de desencadenadores


Los desencadenadores son reactivos, mientras que las restricciones son proactivas Las restricciones se comprueban antes Las tablas pueden tener varios desencadenadores para cualquier accin Comparacin del estado de los datos antes y despus de su modificacin

Ing. BARJ IST UPOLI - 2008

Funcionamiento de los desencadenadores anidados


OrDe_Update

Order_Details 10 41 7 2

OrderID ProductID UnitPrice Quantity Discount

10522 10523 10524 10525

31.00 9.65 30.00 19.00

7 9 24 5

0.2 0.15 0.0 0.2 La realizacin de un pedido provoca la ejecucin del desencadenador OrDe_Update
Se ejecuta la instruccin UPDATE en la tabla Products

InStock_Update

Products
ProductID UnitsInStock

1 2 3 4

15 15 15 65 20

Se ejecuta el desencadenador

InStock_Update UnitsInStock + UnitsOnOrder es < ReorderLevelIng. BARJProductID- 2 para IST UPOLI 2008

Enva un mensaje

Desencadenadores recursivos
Activacin recursiva de un desencadenador Tipos de desencadenadores recursivos

Recursividad directa, que se da cuando un desencadenador se ejecuta y realiza una accin que lo activa de nuevo Recursividad indirecta, que se da cuando un desencadenador se activa y realiza una accin que activa un desencadenador de otra tabla

Conveniencia del uso de los desencadenadores recursivos

Ing. BARJ IST UPOLI - 2008

Exigir reglas de empresa


Los productos con pedidos pendientes no se pueden eliminar
IF (Select Count (*) FROM [Order Details] INNER JOIN deleted ON [Order Details].ProductID = deleted.ProductID ) > 0 ROLLBACK TRANSACTION

La instruccin DELETE se ejecuta en la tabla Product Products


ProductID UnitsInStock

El cdigo del desencadenador comprueba la tabla Order Details Order Details

Se deshace la transaccin

OrderID ProductID UnitPrice Quantity Discount

1 2 3 4

15 10 0 65 20

10522 10523 10524 10525

10 2 41 7

31.00 19.00 9.65 30.00

7 9 24

0.2 0.15 0.0

'No puede procesarse la transaccin' 'Este producto tiene historial de pedidos'


Ing. BARJ IST UPOLI - 2008

Consideraciones acerca del rendimiento


Los desencadenadores trabajan rpidamente porque las tablas insertadas y eliminadas estn en la cach El tiempo de ejecucin est determinado por:
Nmero de tablas a las que se hace referencia Nmero de filas afectadas

Las acciones contenidas en un desencadenador forman parte de una transaccin

Ing. BARJ IST UPOLI - 2008

Demostracion: TRIGGERS (DESENCADENADORES, DISPARADORES)

Ing. BARJ IST UPOLI - 2008

TRIGGERS

Ing. BARJ IST UPOLI - 2008

TRIGGERS

Ing. BARJ IST UPOLI - 2008

TRIGGERS

Ing. BARJ IST UPOLI - 2008

Ing. BARJ IST UPOLI - 2008

TRIGGERS

Ing. BARJ IST UPOLI - 2008

TRIGGERS

Ing. BARJ IST UPOLI - 2008

Ing. BARJ IST UPOLI - 2008

CONCLUSIONES GENERALES

Ing. BARJ IST UPOLI - 2008

MUCHAS GRACIAS!
Ing. Bernardo Robelo
Bernardo.Robelo@gmail.com http://bernardorobelo.blogspot.com

Ing. BARJ IST UPOLI - 2008

Ing. BARJ IST UPOLI - 2008

Ing. BARJ IST UPOLI - 2008

Ing. BARJ IST UPOLI - 2008

También podría gustarte