Este documento presenta información sobre procedimientos almacenados y triggers en SQL Server. Explica cómo crear, modificar y ejecutar procedimientos almacenados, y también cubre los tipos de triggers, cómo crear triggers y ejemplos de su uso.
SQL SERVER Y MYSQL - ADMINISTRACIÓN DE BASE DE DATOS
1. SQL Server & MySQL
Database
Ponente: Ricardo Rabanal
Huánuco
Tema: Presentación
Inicio: 26 de Enero del
2024
Sesión: Sesión 7
Databas
e
2. @data_science.analysis Data Science
926 837 332
@data_science.analysis Data Science @datascienceanalysis
Data Science Analysis
959 495 927
Procesos
almacenados
3. Store Procedures
@data_science.analysis Data Science
926 837 332
@data_science.analysis Data Science @datascienceanalysis
Data Science Analysis
959 495 927
Los procedimientos almacenados en SQL Server son objetos de base de datos que
encapsulan una o más instrucciones SQL para realizar una tarea específica. Son útiles
porque permiten reutilizar código SQL, pueden mejorar el rendimiento al reducir el
tráfico de red y permiten un mayor control de seguridad en las operaciones de la base
de datos.
Crear Procedimientos Almacenados
Para crear un procedimiento almacenado, se usa la instrucción CREATE
PROCEDURE, seguida del nombre del procedimiento y luego los parámetros (si los
hay), y finalmente el cuerpo del procedimiento que contiene las instrucciones SQL.
CREATE PROCEDURE spAddCliente
@Nombre NVARCHAR(100),
@Apellido NVARCHAR(100),
@Email NVARCHAR(255)
AS
BEGIN
INSERT INTO Clientes (Nombre, Apellido, Email)
VALUES (@Nombre, @Apellido, @Email);
END;
GO
4. Store Procedures
@data_science.analysis Data Science
926 837 332
@data_science.analysis Data Science @datascienceanalysis
Data Science Analysis
959 495 927
Alterar Procedimientos Almacenados
Si necesitas cambiar un procedimiento almacenado después de haberlo creado,
puedes utilizar la instrucción ALTER PROCEDURE.
ALTER PROCEDURE spAddCliente
@Nombre NVARCHAR(100),
@Apellido NVARCHAR(100),
@Email NVARCHAR(255),
@FechaRegistro DATE = NULL -- Nuevo parámetro opcional
AS
BEGIN
INSERT INTO Clientes (Nombre, Apellido, Email, FechaRegistro)
VALUES (@Nombre, @Apellido, @Email, COALESCE(@FechaRegistro, GETDATE()));
END;
GO
Ejecutar Procedimientos Almacenados
Para ejecutar un procedimiento almacenado, utilizas la instrucción EXECUTE (o
EXEC).
EXEC spAddCliente
@Nombre = 'Juan',
@Apellido = 'Pérez',
@Email = 'juan.perez@example.com',
@FechaRegistro = '2021-01-01';
5. Store Procedures
@data_science.analysis Data Science
926 837 332
@data_science.analysis Data Science @datascienceanalysis
Data Science Analysis
959 495 927
Alterar Procedimientos Almacenados
Si necesitas cambiar un procedimiento almacenado después de haberlo
creado, puedes utilizar la instrucción ALTER PROCEDURE.
DROP PROCEDURE spAddCliente;
6. TRIGGERS
@data_science.analysis Data Science
926 837 332
@data_science.analysis Data Science @datascienceanalysis
Data Science Analysis
959 495 927
Los triggers (o disparadores) en SQL Server son objetos especiales que se asocian con
tablas o vistas y se activan automáticamente cuando ocurren eventos específicos en la
base de datos, como inserciones, actualizaciones o eliminaciones de registros.
¿Qué Son los Triggers?
Un trigger es un tipo de procedimiento almacenado que se ejecuta automáticamente
("se dispara") en respuesta a ciertos eventos en una tabla o vista. Los eventos
comunes que pueden activar un trigger incluyen INSERT, UPDATE y DELETE.
Tipos de Triggers
Hay dos tipos principales de triggers en SQL Server:
• AFTER Triggers (también conocidos como FOR Triggers): Se ejecutan después de
que se haya completado la acción que los activa, es decir, después de cualquier
operación de INSERT, UPDATE o DELETE.
• INSTEAD OF Triggers: Se ejecutan en lugar de la acción que los activaría, lo que
significa que pueden sobrescribir las operaciones de INSERT, UPDATE o DELETE
en una tabla o vista.
7. TRIGGERS
@data_science.analysis Data Science
926 837 332
@data_science.analysis Data Science @datascienceanalysis
Data Science Analysis
959 495 927
¿Para Qué Sirven los Triggers?
Los triggers son útiles para:
Mantener la integridad de los datos.
Aplicar reglas de negocio de forma automática.
Realizar un seguimiento de los cambios en las tablas para auditorías.
Sincronizar tablas en diferentes bases de datos o sistemas.
Realizar acciones en cascada derivadas de cambios en los datos.
Crear Triggers
Para crear un trigger, se utiliza la instrucción CREATE TRIGGER, seguida del nombre
del trigger, el evento que lo activa y la tabla a la que se asocia.
CREATE TRIGGER trgAfterInsert ON Employees
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
-- Insertar la auditoría en una tabla de auditoría
INSERT INTO EmployeeAudit (AuditAction, EmployeeID, AuditDate)
SELECT 'Insert', i.EmployeeID, GETDATE()
FROM inserted i;
END;
GO
8. TRIGGERS
@data_science.analysis Data Science
926 837 332
@data_science.analysis Data Science @datascienceanalysis
Data Science Analysis
959 495 927
CREATE TABLE Employees (
EmployeeID INT PRIMARY KEY,
Name NVARCHAR(100),
Email NVARCHAR(100)
);
CREATE TABLE EmployeeAudit (
AuditID INT PRIMARY KEY IDENTITY(1,1), -- Un identificador único para cada acción de auditoría.
AuditAction NVARCHAR(50), -- La acción que se está auditando ('Insert' en este caso).
EmployeeID INT, -- El ID del empleado que se está auditando.
AuditDate DATETIME -- La fecha y hora en que ocurrió la acción.
);
INSERT INTO Employees (EmployeeID, Name, Email)
VALUES (123, 'John Doe', 'john.doe@example.com');
9. TRIGGERS
@data_science.analysis Data Science
926 837 332
@data_science.analysis Data Science @datascienceanalysis
Data Science Analysis
959 495 927
Alterar Triggers
Para modificar un trigger existente, puedes usar la instrucción ALTER TRIGGER de
manera similar a cómo lo harías con un procedimiento almacenado.
ALTER TRIGGER trgAfterInsert ON Employees
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
-- Código modificado del trigger
END;
GO
Eliminar Triggers
Para eliminar un trigger, usas la instrucción DROP TRIGGER.
DROP TRIGGER trgAfterInsert;
10. EJEMPLOS TRIGGERS
@data_science.analysis Data Science
926 837 332
@data_science.analysis Data Science @datascienceanalysis
Data Science Analysis
959 495 927
Paso 1: Crear la Tabla de Ejemplo
Primero, necesitas una tabla sobre la cual el trigger va a operar. Creamos una
tabla simple llamada Clientes:
CREATE TABLE Clientes (
ClienteID INT PRIMARY KEY,
Nombre NVARCHAR(100),
Email NVARCHAR(100)
);
Paso 2: Crear un Trigger
Ahora, vamos a crear un trigger que se activará después de que se inserte un
nuevo registro en la tabla Clientes.
CREATE TRIGGER trgAfterInsertOnClientes
ON Clientes
AFTER INSERT
AS
BEGIN
PRINT 'Se ha insertado un nuevo cliente.';
END;
11. EJEMPLOS TRIGGERS
@data_science.analysis Data Science
926 837 332
@data_science.analysis Data Science @datascienceanalysis
Data Science Analysis
959 495 927
Este trigger hace lo siguiente:
Nombre del Trigger: trgAfterInsertOnClientes.
Tabla Asociada: Clientes.
Tipo de Trigger: AFTER INSERT, lo que significa que se ejecutará después de una
operación de inserción en la tabla Clientes.
Acción del Trigger: En este ejemplo simple, el trigger solo imprime un mensaje (PRINT
'Se ha insertado un nuevo cliente.'). En un caso real, aquí podrías insertar lógica más
compleja, como actualizar otra tabla, realizar comprobaciones o registrar la operación
en una tabla de auditoría.
Paso 3: Probar el Trigger
Para ver el trigger en acción, insertamos un registro en la tabla Clientes:
INSERT INTO Clientes (ClienteID, Nombre, Email)
VALUES (2, 'Juan Pérez', 'juan.perez@example.com');
12. EJEMPLOS TRIGGERS
@data_science.analysis Data Science
926 837 332
@data_science.analysis Data Science @datascienceanalysis
Data Science Analysis
959 495 927
Después de ejecutar esta inserción, el trigger trgAfterInsertOnClientes se activará
automáticamente y ejecutará su código, que en este caso es simplemente imprimir un
mensaje.
Modificar un Trigger
Si necesitas cambiar la lógica del trigger, usarías ALTER TRIGGER. Por ejemplo, para
modificar el trigger anterior para que también registre la hora de la inserción, podrías
hacerlo así:
ALTER TRIGGER trgAfterInsertOnClientes
ON Clientes
AFTER INSERT
AS
BEGIN
PRINT 'Se ha insertado un nuevo cliente a las ' + CONVERT(NVARCHAR, GETDATE(), 120);
END;