sqlserver-clase-090801183722-phpapp01

76
 Desarrollo Aplicaciones con SQL Server 2005

Transcript of sqlserver-clase-090801183722-phpapp01

Page 1: 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

Page 2: sqlserver-clase-090801183722-phpapp01

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

5/11/2018 sqlserver-clase-090801183722-phpapp01 - slidepdf.com

http://slidepdf.com/reader/full/sqlserver-clase-090801183722-phpapp01 76/76