76
Desarrollo Aplicaciones con SQL Server 2005

Programacion con SQL Server 2005

  • Upload
    brobelo

  • View
    25.708

  • Download
    0

Embed Size (px)

DESCRIPTION

Tablas Vistas Store Procedures Triggers Constraint http://bernardorobelo.blogspot.com/

Citation preview

Page 1: Programacion con SQL Server 2005

Desarrollo Aplicaciones con SQL Server 2005

Page 2: Programacion con SQL Server 2005

Introducción a:

Email: [email protected]

Ing. Bernardo Robelo

Page 3: Programacion con SQL Server 2005

Ing. BARJ - 2008

PROCEDIMIENTOSPROCEDIMIENTOS

FUNCIONES DE USUARIOFUNCIONES DE USUARIO

VISTASVISTAS

INTEGRIDAD DE DATOSINTEGRIDAD DE DATOS

TRIGGERSTRIGGERS

CURSORESCURSORES

AGENDA

TRANSACT - SQLTRANSACT - SQL

INDICESINDICES

Page 4: Programacion con SQL Server 2005

Ing. BARJ – 2008

Transact-SQL

¿Que es?

Page 5: Programacion con SQL Server 2005

Ing. BARJ – 2008

Transact-SQL

Lenguaje de Definición De Datos

Page 6: Programacion con SQL Server 2005

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: Programacion con SQL Server 2005

Ing. BARJ – IST – UPOLI - 2008

• ¿Qué son ?

• ¿Pará que se utilizan?

Tipos de datos definidos por el usuario

Page 8: Programacion con SQL Server 2005

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: Programacion con SQL Server 2005

Ing. BARJ – IST – UPOLI - 2008

Implementación de la integridad de datos

Page 10: Programacion con SQL Server 2005

Ing. BARJ – IST – UPOLI - 2008

¿Que es la integridad de datos?

Page 11: Programacion con SQL Server 2005

Ing. BARJ – IST – UPOLI - 2008

Tipos de integridad de datos

Integridad de dominio (columnas)

Integridad de entidad (filas)

Integridad referencial(entre tablas)

Page 12: Programacion con SQL Server 2005

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: Programacion con SQL Server 2005

Ing. BARJ – IST – UPOLI - 2008

Integridad de datos

Page 14: Programacion con SQL Server 2005

Ing. BARJ – IST – UPOLI - 2008

Determinación del tipo de restricción que se va a utilizar

Tipo de integridadTipo de integridadTipo de integridadTipo de integridad Tipo de restricciónTipo de restricciónTipo de restricciónTipo de restricción

DominioDominioDEFAULTDEFAULT

CHECKCHECK

REFERENTIALREFERENTIAL

EntidadEntidad PRIMARY KEYPRIMARY KEY

UNIQUEUNIQUE

ReferencialReferencial FOREIGN KEYFOREIGN KEY

CHECKCHECK

Page 15: Programacion con SQL Server 2005

Tipos de restricciones

• Restricciones DEFAULT• Restricciones CHECK• Restricciones PRIMARY KEY• Restricciones UNIQUE• Restricciones FOREIGN KEY• Integridad referencial en cascada

Page 16: Programacion con SQL Server 2005

Ing. BARJ – IST – UPOLI - 2008

¿Qué es un Indice¿Qué es un Indice

Page 17: Programacion con SQL Server 2005

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: Programacion con SQL Server 2005

Ing. BARJ – IST – UPOLI - 2008

¿Qué es una Vista?¿Qué es una Vista?

Page 19: Programacion con SQL Server 2005

Ing. BARJ – IST – UPOLI - 2008

Introducción a las vistas

EmployeeViewEmployeeViewEmployeeViewEmployeeView

Lastname Lastname Firstname Firstname

Davolio Fuller Leverling

Davolio Fuller Leverling

Nancy Andrew Janet

Nancy Andrew Janet

EmployeesEmployeesEmployeesEmployees

EmployeeIDEmployeeID LastName LastName FirstnameFirstname TitleTitle

123

123

DavolioFullerLeverling

DavolioFullerLeverling

NancyAndrewJanet

NancyAndrewJanet

~~~~~~~~~

~~~~~~~~~

Vista del usuarioVista del usuario

USE NorthwindGOCREATE VIEW dbo.EmployeeViewAS SELECT LastName, FirstnameFROM Employees

USE NorthwindGOCREATE VIEW dbo.EmployeeViewAS SELECT LastName, FirstnameFROM Employees

Page 20: Programacion con SQL Server 2005

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 distribuidas

a 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: Programacion con SQL Server 2005

Ing. BARJ – IST – UPOLI - 2008

Ejemplo: Vista de tablas combinadas

OrderIDOrderIDOrderIDOrderID

1066310827104271045110515

1066310827104271045110515

CustomerIDCustomerIDCustomerIDCustomerID

BONAP BONAP PICCO QUICKQUICK

BONAP BONAP PICCO QUICKQUICK

~~~ ~~~ ~~~ ~~~ ~~~

~~~ ~~~ ~~~ ~~~ ~~~

RequiredDateRequiredDateRequiredDateRequiredDate

1997-09-241998-01-261997-02-241997-03-051997-05-07

1997-09-241998-01-261997-02-241997-03-051997-05-07

ShippedDateShippedDateShippedDateShippedDate

1997-10-031998-02-061997-03-031997-03-121997-05-23

1997-10-031998-02-061997-03-031997-03-121997-05-23

Orders Customers

ShipStatusViewUSE NorthwindGOCREATE VIEW dbo.ShipStatusViewASSELECT OrderID, ShippedDate, ContactNameFROM Customers c INNER JOIN Orders o ON c.CustomerID = O.CustomerIDWHERE RequiredDate < ShippedDate

USE NorthwindGOCREATE VIEW dbo.ShipStatusViewASSELECT OrderID, ShippedDate, ContactNameFROM Customers c INNER JOIN Orders o ON c.CustomerID = O.CustomerIDWHERE RequiredDate < ShippedDate

CustomerIDCustomerIDCustomerIDCustomerID

BONAPPICCOQUICK

BONAPPICCOQUICK

CompanyNameCompanyNameCompanyNameCompanyName

Bon app'Piccolo und mehrQUICK-Stop

Bon app'Piccolo und mehrQUICK-Stop

ContactNameContactNameContactNameContactName

Laurence LebihanGeorg PippsHorst Kloss

Laurence LebihanGeorg PippsHorst Kloss

OrderIDOrderIDOrderIDOrderID

102641027110280

102641027110280

1996-08-211996-08-291996-09-11

1996-08-211996-08-291996-09-11

ShippedDateShippedDateShippedDateShippedDate

1996-08-231996-08-301996-09-12

1996-08-231996-08-301996-09-12

ContactNameContactNameContactNameContactName

Laurence LebihanGeorg PippsHorst Kloss

Laurence LebihanGeorg PippsHorst Kloss

Page 22: Programacion con SQL Server 2005

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

• 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: Programacion con SQL Server 2005

Ing. BARJ – IST – UPOLI - 2008

Práctica: Implementación de vistas

Page 24: Programacion con SQL Server 2005

Ing. BARJ – IST – UPOLI - 2008

Práctica: Implementación de vistas

Page 25: Programacion con SQL Server 2005

Ing. BARJ – IST – UPOLI - 2008

¿Qué es un ¿Qué es un procedimiento almacenado?procedimiento almacenado?

Page 26: Programacion con SQL Server 2005

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: Programacion con SQL Server 2005

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: Programacion con SQL Server 2005

Ing. BARJ – IST – UPOLI - 2008

Creación de procedimientos almacenados

• Utilice la instrucción CREATE PROCEDURE para crearlos en la base de datos activa

• Puede anidar hasta 32 niveles• Use sp_help para mostrar información

USE NorthwindGOCREATE PROC dbo.OverdueOrdersAS SELECT * FROM dbo.Orders WHERE RequiredDate < GETDATE() AND ShippedDate IS NullGO

Page 29: Programacion con SQL Server 2005

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 una instrucción INSERT

EXEC OverdueOrders

INSERT INTO CustomersEXEC EmployeeCustomer

Page 30: Programacion con SQL Server 2005

Ing. BARJ – IST – UPOLI - 2008

Ejecución de procedimientos• Paso de valores por el nombre del parámetro

• Paso de valores por posición

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

EXEC 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'

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'

Page 31: Programacion con SQL Server 2005

Ing. BARJ – IST – UPOLI - 2008

Devolución de valores mediante parámetros de salida

CREATE PROCEDURE dbo.mathtutor@m1 smallint,

@m2 smallint,@result smallint OUTPUT

AS SET @result = @m1* @m2GODECLARE @answer smallintEXECUTE mathtutor 5, 6, @answer OUTPUTSELECT 'The result is: ' , @answer

The result is: 30

CREATE PROCEDURE dbo.mathtutor@m1 smallint,

@m2 smallint,@result smallint OUTPUT

AS SET @result = @m1* @m2GODECLARE @answer smallintEXECUTE mathtutor 5, 6, @answer OUTPUTSELECT 'The result is: ' , @answer

The result is: 30

Resultados del Resultados del procedimientoprocedimientoalmacenadoalmacenado

Resultados del Resultados del procedimientoprocedimientoalmacenadoalmacenado

Ejecución del Ejecución del procedimiento procedimiento almacenadoalmacenado

Ejecución del Ejecución del procedimiento procedimiento almacenadoalmacenado

Creación del Creación del procedimiento procedimiento almacenadoalmacenado

Creación del Creación del procedimiento procedimiento almacenadoalmacenado

Page 32: Programacion con SQL Server 2005

Ing. BARJ – IST – UPOLI - 2008

Control de mensajes de error

• La instrucción RETURN sale incondicionalmente de una consulta o procedimiento

Page 33: Programacion con SQL Server 2005

Ing. BARJ – IST – UPOLI - 2008

Práctica Procedimientos Almacenados

Page 34: Programacion con SQL Server 2005

Ing. BARJ – IST – UPOLI - 2008

PROCEDIMIENTOS CON PARÁMETROS

Page 35: Programacion con SQL Server 2005

Ing. BARJ – IST – UPOLI - 2008

PROCEDIMIENTOS ALMACENADOS CON PARÁMETROS CON VALORES POR DEFECTO

Page 36: Programacion con SQL Server 2005

Ing. BARJ – IST – UPOLI - 2008

PROCEDIMIENTOS ALMACENADOS CON PARÁMETROS CON VALORES POR DEFECTO

Page 37: Programacion con SQL Server 2005

Ing. BARJ – IST – UPOLI - 2008

PROCEDIMIENTOS ALMACENADOS CON PARÁMETROS CON VALORES POR DEFECTO

Page 38: Programacion con SQL Server 2005

Ing. BARJ – IST – UPOLI - 2008

Page 39: Programacion con SQL Server 2005

Ing. BARJ – IST – UPOLI - 2008

VARIABLES DE SALIDA EN PROCEDIMIENTOS ALMACENADOS

Page 40: Programacion con SQL Server 2005

Ing. BARJ – IST – UPOLI - 2008

VARIABLES DE SALIDA EN PROCEDIMIENTOS ALMACENADOS

Page 41: Programacion con SQL Server 2005

Ing. BARJ – IST – UPOLI - 2008

Ejemplos

Page 42: Programacion con SQL Server 2005

Ing. BARJ – IST – UPOLI - 2008

Ejemplos

Page 43: Programacion con SQL Server 2005

Ing. BARJ – IST – UPOLI - 2008

¿Qué es una función definida por el usuario?

Page 44: Programacion con SQL Server 2005

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 una consulta 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

Page 45: Programacion con SQL Server 2005

Ing. BARJ – IST – UPOLI - 2008

Uso de una función escalar definida por el usuario

• 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, excepto

text, ntext, image, cursor o timestamp

Page 46: Programacion con SQL Server 2005

Ing. BARJ – IST – UPOLI - 2008

Demostracion: Creación de funciones definidas por el usuario

Page 47: Programacion con SQL Server 2005

Ing. BARJ – IST – UPOLI - 2008

FUNCIONES DEFINIDAS POR EL USUARIO

Declare Table

Page 48: Programacion con SQL Server 2005

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: Programacion con SQL Server 2005

Ing. BARJ – IST – UPOLI - 2008

Funciones de Tablas en Linea

Page 50: Programacion con SQL Server 2005

Ing. BARJ – IST – UPOLI - 2008

Funciones de Tablas Con Instrucciones

Page 51: Programacion con SQL Server 2005

Ing. BARJ – IST – UPOLI - 2008

Funciones con Definicion de Esquema

Page 52: Programacion con SQL Server 2005

Ing. BARJ – IST – UPOLI - 2008

Práctica: Creación de funciones definidas por el usuario

Page 53: Programacion con SQL Server 2005

Ing. BARJ – IST – UPOLI - 2008

Ejercicios

Ver Solución

Page 54: Programacion con SQL Server 2005

Ing. BARJ – IST – UPOLI - 2008

Ejercicios

Solución

Page 55: Programacion con SQL Server 2005

Ing. BARJ – IST – UPOLI - 2008

Ejercicios

Page 56: Programacion con SQL Server 2005

Ing. BARJ – IST – UPOLI - 2008

Ejercicios

Page 57: Programacion con SQL Server 2005

Ing. BARJ – IST – UPOLI - 2008

¿Que es un TRIGGER? (DESENCADENADORES, DISPARADORES)

Page 58: Programacion con SQL Server 2005

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.

• Asociación a una tabla• Invocación automática• Imposibilidad de llamada directa• Identificación con una transacción

Page 59: Programacion con SQL Server 2005

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 acción• Comparación del estado de los datos antes y después de su

modificación

Page 60: Programacion con SQL Server 2005

Ing. BARJ – IST – UPOLI - 2008

Funcionamiento de los desencadenadores anidados

2 15

UnitsInStock + UnitsOnOrder es < ReorderLevel para ProductID 2

OrDe_UpdateOrDe_Update

La realización de un pedido provoca la ejecución del desencadenador OrDe_Update

Se ejecuta la instrucción UPDATE en la tabla Products

InStock_UpdateInStock_Update ProductsProductsProductsProducts

ProductIDProductID UnitsInStockUnitsInStock …… ……

1

34

1

34

15156520

15156520

Se ejecuta el desencadenador InStock_Update

Envía un mensaje

Order_DetailsOrder_DetailsOrder_DetailsOrder_Details

OrderIDOrderID

105221052310524

105221052310524

ProductIDProductID

10417

10417

UnitPriceUnitPrice

31.009.6530.00

31.009.6530.00

QuantityQuantity

7924

7924

DiscountDiscount

0.20.150.0

0.20.150.0

10525 19.002 0.25

2 15

Page 61: Programacion con SQL Server 2005

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ón que lo activa de nuevo

– Recursividad indirecta, que se da cuando un desencadenador se activa y realiza una acción que activa un desencadenador de otra tabla

• Conveniencia del uso de los desencadenadores recursivos

Page 62: Programacion con SQL Server 2005

Ing. BARJ – IST – UPOLI - 2008

ProductsProductsProductsProducts

ProductIDProductID UnitsInStockUnitsInStock …… ……

1234

1234

15106520

15106520

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 ) > 0ROLLBACK TRANSACTION

IF (Select Count (*) FROM [Order Details] INNER JOIN deleted ON [Order Details].ProductID = deleted.ProductID ) > 0ROLLBACK TRANSACTION

La instrucción DELETE se ejecuta en la tabla Product

El código del desencadenadorcomprueba la tabla Order Details

Order DetailsOrder DetailsOrder DetailsOrder Details

OrderIDOrderID

10522105231052410525

10522105231052410525

ProductIDProductID

102417

102417

UnitPriceUnitPrice

31.0019.009.6530.00

31.0019.009.6530.00

QuantityQuantity

7924

7924

DiscountDiscount

0.20.150.0

0.20.150.0

9

'No puede procesarse la transacción''Este producto tiene historial de pedidos'

'No puede procesarse la transacción''Este producto tiene historial de pedidos'

Se deshacela transacción

ProductsProductsProductsProducts

ProductIDProductID UnitsInStockUnitsInStock …… ……

1

34

1

34

15106520

15106520

2 0

Page 63: Programacion con SQL Server 2005

Ing. BARJ – IST – UPOLI - 2008

Consideraciones acerca del rendimiento

• Los desencadenadores trabajan rápidamente porque las tablas insertadas 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

Page 64: Programacion con SQL Server 2005

Ing. BARJ – IST – UPOLI - 2008

Demostracion: TRIGGERS (DESENCADENADORES, DISPARADORES)

Page 65: Programacion con SQL Server 2005

Ing. BARJ – IST – UPOLI - 2008

TRIGGERS

Page 66: Programacion con SQL Server 2005

Ing. BARJ – IST – UPOLI - 2008

TRIGGERS

Page 67: Programacion con SQL Server 2005

Ing. BARJ – IST – UPOLI - 2008

TRIGGERS

Page 68: Programacion con SQL Server 2005

Ing. BARJ – IST – UPOLI - 2008

Page 69: Programacion con SQL Server 2005

Ing. BARJ – IST – UPOLI - 2008

TRIGGERS

Page 70: Programacion con SQL Server 2005

Ing. BARJ – IST – UPOLI - 2008

TRIGGERS

Page 71: Programacion con SQL Server 2005

Ing. BARJ – IST – UPOLI - 2008

Page 72: Programacion con SQL Server 2005

Ing. BARJ – IST – UPOLI - 2008

CONCLUSIONES GENERALES

Page 73: Programacion con SQL Server 2005

Ing. BARJ – IST – UPOLI - 2008

MUCHAS GRACIAS!

[email protected]

Ing. Bernardo RobeloIng. Bernardo Robelo

http://bernardorobelo.blogspot.com

Page 74: Programacion con SQL Server 2005

Ing. BARJ – IST – UPOLI - 2008

Page 75: Programacion con SQL Server 2005

Ing. BARJ – IST – UPOLI - 2008

Page 76: Programacion con SQL Server 2005

Ing. BARJ – IST – UPOLI - 2008