Documentos de Académico
Documentos de Profesional
Documentos de Cultura
TBD U5 - SQL Procedural
TBD U5 - SQL Procedural
MÉXICO
Instituto Tecnológico Superior de Guasave
Ingeniería en Sistemas Computacionales
Taller de Base de Datos
Unidad V: TSQL Procedural
TALLER DE BASE DE DATOS
¿Qué es SQL Procedural? Son un conjunto de sentencias de T-SQL los cuales son
guardados en un archivo fuente y almacenados en el SQL Server, para ser
convocados posteriormente por medio de Queries o desde una aplicación que
se conecta al SQL Server.
• El servidor de la base de datos tiene acceso directo a los datos necesarios para
manipular y sólo necesita enviar el resultado final al usuario.
• Los procedimientos almacenados pueden permitir que la lógica del negocio se
encuentre como un API en la base de datos.
• Reducen la probabilidad de que los datos sean corrompidos por el uso de
programas clientes defectuosos o erróneos.
• Aumentan el rendimiento: Una vez creados, son compilados y almacenados
en el catálogo de la base de datos. Corren más rápido que comandos SQL
enviados desde aplicaciones externas, ya que estos no están compilados.
TALLER DE BASE DE DATOS
• Reducen el tráfico entre las aplicaciones y el servidor de bases de datos.
• Son reusables y transparentes a cualquier aplicación que lo quiera usar.
• Son seguros: Los DBA pueden dar permiso a cierta aplicación para que pueda
acceder a y SP en el catálogo de la base de datos,
TALLER DE BASE DE DATOS
Desventajas
• No son modificables: Los Stored procedures son “definidos una vez, usados
muchas”. Si se necesita modificarlo, su definición tiene que ser reemplazada
totalmente.
• Cualquier cambio instantáneamente afecta todas las otras piezas de software,
reportes, etc. (dentro o fuera del SGBD) que directa o indirectamente se
refieran a este.
• Por varias razones, muchas organizaciones limitan estrictamente quiénes
pueden hacer consultas a la base de datos.
• Sólo contienen SQL declarativo, así que es muy dificil escribir procedimientos
complejos para negocios como en otros lenguajes
TALLER DE BASE DE DATOS
Tipos de SP
Sintaxis
EXECUTE | EXEC procedure_name [parameter1, parameter2, n…]
WITH RESULT SETS (
( [column_definition1, column_definition2, n…])
)
Ejemplo
USE AdventureWorks2012
EXEC dbo.PurchaseOrderInformation
TALLER DE BASE DE DATOS
Ejemplo: en este caso ejecutaremos de nuevo el procedimiento ya creado pero usando la
instrucción With Result Sets, la cual debe tener el mismo orden que las variables que
toma el Select del procedimiento o de lo contrario SQL Server enviará un error de
ejecución:
USE AdventureWorks2012;
EXEC dbo.PurchaseOrderInformation
WITH RESULT SETS (
( [Purchase Order ID] int,
[Purchase Order Detail ID] int,
[Order Date] datetime,
[Total Due] Money,
[Received Quantity] float,
[Product Name] varchar(50) )
)
TALLER DE BASE DE DATOS
Uso de parámetros en los procedimientos
• AL ser los procedimientos subrutinas de código programadas, es posible
pasarles parámetros en la misma forma que lo hacemos en un lenguaje de
programación de alto nivel. Para esto debemos especificarlos en la cláusula
Create Proc al final de la misma, como lo muestra el siguiente ejemplo:
USE AdventureWorks2012;
GO
CREATE PROC dbo.SampleOutput @Parameter2 int OUTPUT
As SELECT @Parameter2 = 10
DECLARE @HoldParameter2 INT
EXEC dbo.SampleOutput @HoldParameter2 OUTPUT
SELECT @HoldParameter2
TALLER DE BASE DE DATOS
Ejemplo:
USE AdventureWorks2012;
GO
ALTER PROCEDURE [dbo].[PurchaseOrderInformation]
@EmployeeID int, @OrderYear int = 2005
AS BEGIN
SELECT poh.PurchaseOrderID, pod.PurchaseOrderDetailID, poh.OrderDate,
poh.TotalDue, pod.ReceivedQty, p.Name ProductName
FROM Purchasing.PurchaseOrderHeader poh
INNER JOIN Purchasing.PurchaseOrderDetail pod ON
poh.PurchaseOrderID = pod.PurchaseOrderID
INNER JOIN Production.Product p ON pod.ProductID = p.ProductID
WHERE poh.EmployeeID = @EmployeeID AND
YEAR(poh.OrderDate) = @OrderYear
TALLER DE BASE DE DATOS
• Ejecución:
Tipos de triggers:
• Existen varios tipos de triggers en SQL Server, en esta unidad nos enfocaremos
en dos de ellos, que son:
After
Instead Of
TALLER DE BASE DE DATOS
• After: este tipo de trigger es ejecutado después que una instrucción de DML
fue llamada. Es muy importante tener en cuenta que el trigger formará parte
de la misma transacción en la que fue disparado, por lo que dicha transacción
no se considera completa hasta que el trigger completa toda su ejecución.
• Abrir
• SQL Server Management Studio (SSMS)
• Expandir la base de datos
• Expandir la carpeta Tables
• Seleccionar y expandir la tabla
correspondiente
• Expandir la carpeta Triggers
• Click con el derecho sobre Triggers
• Seleccionar New Trigger
TALLER DE BASE DE DATOS
Creación de el trigger:
USE AdventureWorks2012;
GO
CREATE TRIGGER HumanResources.iCheckModifedDate
ON HumanResources.Department FOR INSERT
AS BEGIN
DECLARE @modifieddate datetime, @DepartmentID int
SELECT @modifieddate = modifieddate, @DepartmentID = departmentid
FROM inserted;
IF (DATEDIFF(Day, @modifiedDate, getdate()) > 0)
BEGIN
UPDATE HumanResources.Department
SET ModifiedDate = GETDATE() WHERE DepartmentID = @DepartmentID
END
TALLER DE BASE DE DATOS
Disparar su ejecución:
USE AdventureWorks2012;
INSERT INTO HumanResources.Department
VALUES (
'Executive Marketing',
'Executive General and Administration',
'2/12/2011');
SELECT * FROM HumanResources.Department
TALLER DE BASE DE DATOS
Modificación de un trigger
• Expandir la base de datos
• Expandir la tabla correspondiente
• Expandir la carpeta triggers
• Seleccionar el trigger con click derecho y
luego la opción Modify
• Aparecerá el trigger en una ventana pero con
la sentencia Alter en lugar de Create
• Realizar los cambios necesarios y ejecutar
TALLER DE BASE DE DATOS
• Basándonos en la lámina anterior en el trigger buscar el código:
SET ModifiedDate = GETDATE()
• Y sustituirlo por:
SET ModifiedDate = DATEADD(day, -1, GETDATE() )
• Ejecutamos el query para completar la modificación del trigger
• En una nueva ventana de query analycer ejecutar el siguiente código:
USE AdventureWorks2012;
INSERT INTO HumanResources.Department
VALUES ('Executive Purchasing', 'Executive General and Administration',
'2/12/2011')
SELECT *FROM HumanResources.Department
TALLER DE BASE DE DATOS
• Desactivar y reactivar triggers: en algunos casos es necesario que un trigger deje de
ser disparado pero no deseamos eliminarlo por lo que SQL Server proporciona el
medio para desactivar un trigger en particular y luego reactivarlo cuando sea
necesario:
• Desactivar:
USE AdventureWorks2012;
DISABLE TRIGGER HumanResources.iCheckModifedDate
ON HumanResources.Department;
• Reactivar:
USE AdventureWorks2012;
ENABLE TRIGGER HumanResources.iCheckModifedDate
TALLER DE BASE DE DATOS
Bibliografía Consultada
Adam Jorgersen, Microsoft SQL Server 2012 Bible. John Wiley & Sons,
Inc. Indianapolis, Indiana. 2012.