Download - sqlserver-clase-090801183722-phpapp01
![Page 1: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/1.jpg)
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
![Page 2: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/2.jpg)
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
![Page 3: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/3.jpg)
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
![Page 4: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/4.jpg)
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?
![Page 5: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/5.jpg)
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
![Page 6: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/6.jpg)
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
![Page 7: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/7.jpg)
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
![Page 8: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/8.jpg)
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.
![Page 9: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/9.jpg)
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
![Page 10: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/10.jpg)
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?
![Page 11: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/11.jpg)
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)
![Page 12: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/12.jpg)
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
![Page 13: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/13.jpg)
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
![Page 14: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/14.jpg)
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
![Page 15: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/15.jpg)
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
![Page 16: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/16.jpg)
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
![Page 17: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/17.jpg)
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
![Page 18: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/18.jpg)
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?
![Page 19: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/19.jpg)
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
![Page 20: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/20.jpg)
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
![Page 21: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/21.jpg)
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
![Page 22: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/22.jpg)
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
![Page 23: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/23.jpg)
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
![Page 24: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/24.jpg)
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
![Page 25: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/25.jpg)
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?
![Page 26: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/26.jpg)
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
![Page 27: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/27.jpg)
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
![Page 28: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/28.jpg)
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
![Page 29: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/29.jpg)
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
![Page 30: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/30.jpg)
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
![Page 31: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/31.jpg)
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
![Page 32: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/32.jpg)
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
![Page 33: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/33.jpg)
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
![Page 34: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/34.jpg)
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
![Page 35: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/35.jpg)
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
![Page 36: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/36.jpg)
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
![Page 37: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/37.jpg)
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
![Page 38: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/38.jpg)
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
![Page 39: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/39.jpg)
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
![Page 40: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/40.jpg)
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
![Page 41: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/41.jpg)
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
![Page 42: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/42.jpg)
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
![Page 43: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/43.jpg)
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?
![Page 44: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/44.jpg)
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
![Page 45: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/45.jpg)
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:
![Page 46: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/46.jpg)
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
![Page 47: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/47.jpg)
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
![Page 48: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/48.jpg)
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”
![Page 49: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/49.jpg)
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
![Page 50: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/50.jpg)
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
![Page 51: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/51.jpg)
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
![Page 52: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/52.jpg)
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
![Page 53: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/53.jpg)
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
![Page 54: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/54.jpg)
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
![Page 55: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/55.jpg)
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
![Page 56: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/56.jpg)
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
![Page 57: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/57.jpg)
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 ?
![Page 58: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/58.jpg)
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
![Page 59: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/59.jpg)
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
![Page 60: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/60.jpg)
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
![Page 61: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/61.jpg)
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
![Page 62: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/62.jpg)
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
![Page 63: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/63.jpg)
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:
![Page 64: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/64.jpg)
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
![Page 65: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/65.jpg)
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
![Page 66: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/66.jpg)
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
![Page 67: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/67.jpg)
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
![Page 68: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/68.jpg)
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
![Page 69: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/69.jpg)
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
![Page 70: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/70.jpg)
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
![Page 71: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/71.jpg)
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
![Page 72: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/72.jpg)
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
![Page 73: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/73.jpg)
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
![Page 74: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/74.jpg)
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
![Page 75: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/75.jpg)
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
![Page 76: sqlserver-clase-090801183722-phpapp01](https://reader031.vdocumento.com/reader031/viewer/2022020810/5571fd6c4979599169990ff2/html5/thumbnails/76.jpg)
5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com
http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 76/76