sqlserver-clase-090801183722-phpapp01
-
Upload
camilo-torres -
Category
Documents
-
view
81 -
download
0
Transcript of sqlserver-clase-090801183722-phpapp01
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 1/76
Desarrollo Aplicaciones con SQL Server 2005
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 2/76
Introducción a:
Email: [email protected]
Ing. Bernardo Robelo
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 3/76
Ing. BARJ - 2008
PROCEDIMIENTOS
FUNCIONES DE USUARIO
VISTAS
INTEGRIDAD DE DATOS
TRIGGERS
CURSORES
AGENDA
TRANSACT - SQL
INDICES
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 4/76
Ing. BARJ–
2008
Transact-SQL
¿Que es?
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 5/76
Ing. BARJ–
2008
Transact-SQL
Lenguaje de Definición De Datos
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 6/76
Ing. BARJ–
IST–
UPOLI - 2008
Tipos de datos del sistema
• Numérico – Entero
– Numérico exacto
– Numérico aproximado
– Moneda
• Fecha y hora• Carácter y caracteres Unicode• Binario• Otros
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 7/76
Ing. BARJ–
IST–
UPOLI - 2008
• ¿Qué son ?
• ¿Pará que se utilizan?
Tipos de datos definidos por el usuario
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 8/76
Ing. BARJ–
IST–
UPOLI - 2008
Tipos de datos definidos por el usuario
– Los tipos de datos definidos por el usuario están basados en los
tipos de datos disponibles a través de SQL Server 2005.
– Los tipos de datos definidos por el usuario se pueden emplear para asegurar que un dato tenga las mismas características
sobre múltiples tablas.
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 9/76
Ing. BARJ–
IST–
UPOLI - 2008
Implementación de la integridad de datos
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 10/76
Ing. BARJ–
IST–
UPOLI - 2008
¿Que es la integridad de datos?
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 11/76
Ing. BARJ–
IST–
UPOLI - 2008
Tipos de integridad de datos
Integridad de dominio
(columnas)
Integridad de entidad (filas)
Integridad referencial(entre tablas)
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 12/76
Ing. BARJ–
IST–
UPOLI - 2008
Exigir integridad de los datos
• Integridad de datos declarativa – Los criterios se definen en la definición del objeto
– Asegurada automáticamente 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
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 13/76
Ing. BARJ–
IST–
UPOLI - 2008
Integridad de datos
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 14/76
Ing. BARJ–
IST–
UPOLI - 2008
Determinación del tipo de restricción que se va autilizar
Tipo de integridad Tipo de restricción
Dominio
DEFAULT
CHECK
REFERENTIAL
EntidadPRIMARY KEY
UNIQUE
ReferencialFOREIGN KEY
CHECK
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 15/76
Tipos de restricciones
• Restricciones DEFAULT• Restricciones CHECK
• Restricciones PRIMARY KEY
• Restricciones UNIQUE
• Restricciones FOREIGN KEY
• Integridad referencial en cascada
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 16/76
Ing. BARJ–
IST–
UPOLI - 2008
¿Qué es un Indice
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 17/76
Tipos de Indice
Ing. BARJ–
IST–
UPOLI - 2008
• 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
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 18/76
Ing. BARJ–
IST–
UPOLI - 2008
¿Qué es una Vista?
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 19/76
Ing. BARJ–
IST–
UPOLI - 2008
Introducción a las vistas
EmployeeView
Lastname Firstname
DavolioFullerLeverling
NancyAndrewJanet
Employees
EmployeeID LastName Firstname Title
123
DavolioFullerLeverling
NancyAndrewJanet
~~~~~~~~~
Vista del usuario
USE NorthwindGOCREATE VIEW dbo.EmployeeViewASSELECT LastName, FirstnameFROM Employees
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 20/76
Ing. BARJ–
IST–
UPOLI - 2008
Ventajas de las vistas
• Centrar el interés en los datos de los usuarios
– Centrarse sólo en los datos importantes o adecuados
– Limitar el acceso a los datos confidenciales
• Enmascarar la complejidad de la base de datos – Ocultar el diseño de la base de datos compleja
– Simplificar las consultas complejas, incluyendo las consultas distribuidasa datos heterogéneos
• Simplificar la administración de los permisos de usuario
• Mejorar el rendimiento
• Organizar los datos para exportarse a otras aplicaciones
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 21/76
Ing. BARJ–
IST–
UPOLI - 2008
Ejemplo: Vista de tablas combinadas
OrderID
10663
10827
10427
10451
10515
CustomerID
BONAP
BONAP
PICCO
QUICK
QUICK
~~~
~~~
~~~
~~~
~~~
RequiredDate
1997-09-24
1998-01-26
1997-02-24
1997-03-05
1997-05-07
ShippedDate
1997-10-03
1998-02-06
1997-03-03
1997-03-12
1997-05-23
Orders Customers
ShipStatusViewUSE Northwind
GO
CREATE VIEW dbo.ShipStatusView
AS
SELECT OrderID, ShippedDate, ContactNameFROM Customers c INNER JOIN Orders o
ON c.CustomerID = O.CustomerID
WHERE RequiredDate < ShippedDate
CustomerID
BONAP
PICCO
QUICK
CompanyName
Bon app'
Piccolo und mehr
QUICK-Stop
ContactName
Laurence Lebihan
Georg Pipps
Horst Kloss
OrderID
1026410271
10280
1996-08-211996-08-29
1996-09-11
ShippedDate
1996-08-231996-08-30
1996-09-12
ContactName
Laurence LebihanGeorg Pipps
Horst Kloss
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 22/76
Ing. BARJ–
IST–
UPOLI - 2008
Uso de vistas para dividir datos
• Puede utilizar las vistas para dividir los datos en varios servidoreso instancias de SQL Server
• Cómo utiliza SQL Server las vistas para dividir datos
• Cómo las vistas divididas mejoran el rendimiento
• NO SE PUEDE – No se puede incluir la cláusula ORDER BY
– No se puede incluir la palabra clave INTO
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 23/76
Ing. BARJ–
IST–
UPOLI - 2008
Práctica: Implementación de vistas
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 24/76
Ing. BARJ–
IST–
UPOLI - 2008
Práctica: Implementación de vistas
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 25/76
Ing. BARJ–
IST–
UPOLI - 2008
¿Qué es un procedimiento almacenado?
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 26/76
Ing. BARJ–
IST–
UPOLI - 2008
Definición de procedimientos almacenados
• Colecciones con nombre de instrucciones Transact-SQL
• Encapsulado de tareas repetitivas
• Aceptar parámetros de entrada y devolver valores
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 27/76
Ing. BARJ–
IST–
UPOLI - 2008
Ventajas de los procedimientos almacenados
• Compartir la lógica de la aplicación• Exposición de los detalles de las tablas de la
base de datos
• Proporcionar mecanismos de seguridad
• Mejorar el rendimiento• Reducir el tráfico de red
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 28/76
Ing. BARJ–
IST–
UPOLI - 2008
Creación de procedimientos almacenados
• Utilice la instrucción CREATE PROCEDURE para crearlos en labase de datos activa
• Puede anidar hasta 32 niveles• Use sp_help para mostrar información
USE Northwind
GO
CREATE PROC dbo.OverdueOrders
ASSELECT *
FROM dbo.Orders
WHERE RequiredDate < GETDATE() AND ShippedDate IS NullGO
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 29/76
Ing. BARJ–
IST–
UPOLI - 2008
Ejecución de procedimientos almacenados
• Ejecución de un procedimiento almacenado por
separado
• Ejecución de un procedimiento almacenado en unainstrucción INSERT
EXEC OverdueOrders
INSERT INTO CustomersEXEC EmployeeCustomer
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 30/76
Ing. BARJ–
IST–
UPOLI - 2008
Ejecución de procedimientos
• Paso de valores por el nombre del parámetro
• Paso de valores por posiciónEXEC AddCustomer 'ALFKI2', 'Alfreds
Futterkiste', 'Maria Anders', 'Sales
Representative', 'Obere Str. 57', 'Berlin',
NULL, '12209', 'Germany', '030-0074321'
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'
D l ió d l di t á t d
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 31/76
Ing. BARJ–
IST–
UPOLI - 2008
Devolución de valores mediante parámetros desalida
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
The result is: 30
Resultados delprocedimientoalmacenado
Ejecución delprocedimientoalmacenado
Creación delprocedimientoalmacenado
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 32/76
Ing. BARJ–
IST–
UPOLI - 2008
Control de mensajes de error
• La instrucción RETURN sale incondicionalmente de unaconsulta o procedimiento
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 33/76
Ing. BARJ–
IST–
UPOLI - 2008
Práctica Procedimientos Almacenados
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 34/76
Ing. BARJ–
IST–
UPOLI - 2008
PROCEDIMIENTOS CON PARÁMETROS
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 35/76
Ing. BARJ–
IST–
UPOLI - 2008
PROCEDIMIENTOS ALMACENADOS CON PARÁMETROSCON VALORES POR DEFECTO
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 36/76
Ing. BARJ–
IST–
UPOLI - 2008
PROCEDIMIENTOS ALMACENADOS CON PARÁMETROSCON VALORES POR DEFECTO
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 37/76
Ing. BARJ–
IST–
UPOLI - 2008
PROCEDIMIENTOS ALMACENADOS CON PARÁMETROSCON VALORES POR DEFECTO
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 38/76
Ing. BARJ–
IST–
UPOLI - 2008
VARIABLES DE SALIDA
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 39/76
Ing. BARJ–
IST–
UPOLI - 2008
VARIABLES DE SALIDAEN PROCEDIMIENTOS ALMACENADOS
VARIABLES DE SALIDA
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 40/76
Ing. BARJ–
IST–
UPOLI - 2008
VARIABLES DE SALIDAEN PROCEDIMIENTOS ALMACENADOS
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 41/76
Ing. BARJ–
IST–
UPOLI - 2008
Ejemplos
Ejemplos
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 42/76
Ing. BARJ–
IST–
UPOLI - 2008
Ejemplos
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 43/76
Ing. BARJ–
IST–
UPOLI - 2008
¿Qué es una función definida por el usuario?
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 44/76
Ing. BARJ–
IST–
UPOLI - 2008
¿Qué es una función definida por el usuario?
Una función de usuario, se crea con el fin de automatizar unaconsulta que se realiza a menudo.
• Funciones escalares – Similar a una función 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 línea
– Similar a una vista con parámetros – Devuelve una tabla como el resultado de una instrucción SELECTúnica
Uso de una función escalar definida por el
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 45/76
Ing. BARJ – IST – UPOLI - 2008
Uso de una función escalar definida por elusuario
• La cláusula RETURNS especifica el tipo de datos• La función se define en un bloque BEGIN y END
• El tipo de devolución puede ser cualquier tipo de datos, exceptotext, ntext, image, cursor o timestamp
Demostracion:
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 46/76
Ing. BARJ – IST – UPOLI - 2008
Demostracion:Creación de funciones definidas por el usuario
FUNCIONES DEFINIDAS POR EL USUARIO
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 47/76
Ing. BARJ – IST – UPOLI - 2008
FUNCIONES DEFINIDAS POR EL USUARIO
Declare Table
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 48/76
Ing. BARJ – IST – UPOLI - 2008
Funciones Escalares
Veamos en el Enteprise Manager, la funcion creada, consultamos el
apartado “Funciones definidas por el usuario”
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 49/76
Ing. BARJ – IST – UPOLI - 2008
Funciones de Tablas en Linea
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 50/76
Ing. BARJ – IST – UPOLI - 2008
Funciones de Tablas Con Instrucciones
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 51/76
Ing. BARJ – IST – UPOLI - 2008
Funciones con Definicion de Esquema
P á ti
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 52/76
Ing. BARJ – IST – UPOLI - 2008
Práctica:Creación de funciones definidas por el usuario
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 53/76
Ing. BARJ – IST – UPOLI - 2008
Ejercicios
Ver Solución
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 54/76
Ing. BARJ – IST – UPOLI - 2008
Ejercicios
Solución
Ej i i
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 55/76
Ing. BARJ – IST – UPOLI - 2008
Ejercicios
Ej i i
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 56/76
Ing. BARJ – IST – UPOLI - 2008
Ejercicios
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 57/76
Ing. BARJ – IST – UPOLI - 2008
¿Que es un TRIGGER?
(DESENCADENADORES, DISPARADORES)
Q é d d d ?
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 58/76
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 datosde una tabla que el desencadenador protege.
• Asociación a una tabla
• Invocación automática
• Imposibilidad de llamada directa
• Identificación con una transacción
Consideraciones acerca del uso de
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 59/76
Ing. BARJ – IST – UPOLI - 2008
Co s de ac o es ace ca de uso dedesencadenadores
• Los desencadenadores son reactivos, mientrasque las restricciones son proactivas
• Las restricciones se comprueban antes
• Las tablas pueden tener varios desencadenadorespara cualquier acción
• Comparación del estado de los datos antes y después de sumodificación
Funcionamiento de los desencadenadores
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 60/76
Ing. BARJ – IST – UPOLI - 2008
u c o a e to de os dese cade ado esanidados
2 15
UnitsInStock + UnitsOnOrderes < ReorderLevel para ProductID 2
OrDe_Update
La realización de un pedidoprovoca la ejecución deldesencadenador OrDe_Update
Se ejecuta la instrucciónUPDATE en la tabla Products
InStock_UpdateProducts
ProductID UnitsInStock … … 1
34
15
15
6520
Se ejecuta el desencadenador InStock_Update
Envía un mensaje
Order_Details
OrderID
10522
10523
10524
ProductID
10
41
7
UnitPrice
31.00
9.65
30.00
Quantity
7
9
24
Discount
0.2
0.15
0.0
10525 19.002 0.25
2 15
D d d i
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 61/76
Ing. BARJ – IST – UPOLI - 2008
Desencadenadores recursivos
• Activación recursiva de un desencadenador • Tipos de desencadenadores recursivos – Recursividad directa, que se da cuando un desencadenador se ejecuta y realiza
una acciónque lo activa de nuevo
– Recursividad indirecta, que se da cuando un desencadenador se activa y realiza
una acciónque activa un desencadenador de otra tabla
• Conveniencia del uso de los desencadenadores recursivos
E i i l d
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 62/76
Ing. BARJ – IST – UPOLI - 2008
Products
ProductID UnitsInStock … … 1
2
34
15
10
6520
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 instrucción DELETE se
ejecuta en la tabla Product
El código del desencadenador
comprueba la tabla Order Details
Order Details
OrderID
10522
10523
1052410525
ProductID
10
2
417
UnitPrice
31.00
19.00
9.6530.00
Quantity
7
9
24
Discount
0.2
0.15
0.0
9
'No puede procesarse la transacción'
'Este producto tiene historial de pedidos '
Se deshace
la transacciónProducts
ProductID UnitsInStock … … 1
34
15
10
6520
2 0
C id i d l di i t
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 63/76
Ing. BARJ – IST – UPOLI - 2008
Consideraciones acerca del rendimiento
• Los desencadenadores trabajan rápidamente porque las tablasinsertadas y eliminadas están en la caché
• El tiempo de ejecución está determinado por: – Número de tablas a las que se hace referencia
– Número de filas afectadas• Las acciones contenidas en un desencadenador forman parte de
una transacción
Demostracion:
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 64/76
Ing. BARJ – IST – UPOLI - 2008
TRIGGERS (DESENCADENADORES,DISPARADORES)
TRIGGERS
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 65/76
Ing. BARJ – IST – UPOLI - 2008
TRIGGERS
TRIGGERS
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 66/76
Ing. BARJ – IST – UPOLI - 2008
TRIGGERS
TRIGGERS
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 67/76
Ing. BARJ – IST – UPOLI - 2008
TRIGGERS
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 68/76
Ing. BARJ – IST – UPOLI - 2008
TRIGGERS
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 69/76
Ing. BARJ – IST – UPOLI - 2008
TRIGGERS
TRIGGERS
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 70/76
Ing. BARJ – IST – UPOLI - 2008
TRIGGERS
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 71/76
Ing. BARJ – IST – UPOLI - 2008
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 72/76
Ing. BARJ – IST – UPOLI - 2008
CONCLUSIONES GENERALES
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 73/76
Ing. BARJ – IST – UPOLI - 2008
MUCHAS GRACIAS!
[email protected]. Bernardo Robelo
http://bernardorobelo.blogspot.com
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 74/76
Ing. BARJ – IST – UPOLI - 2008
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 75/76
Ing. BARJ – IST – UPOLI - 2008
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 76/76