Inicio > Curso básico de SQL Server 2008 > Auditoria Triggers – Sql Server 2008

Auditoria Triggers – Sql Server 2008


— Ejemplo simple de triggers
IF EXISTS (SELECT NAME FROM sys.databases
           WHERE name = ‘Pruebas’)
  BEGIN
    DROP DATABASE Pruebas
  END

CREATE DATABASE Pruebas
GO

USE Pruebas
GO

CREATE TABLE dbo.TablaTriggers01 (ID INT)
GO

CREATE TABLE dbo.TablaTriggers02 (ID INT)
GO

CREATE TRIGGER dbo.TriggerTablaInsert ON TablaTriggers01
FOR INSERT
AS

DECLARE @ID INT
SELECT @ID = ID FROM INSERTED
 
INSERT INTO dbo.TablaTriggers02 VALUES(@ID)
GO

— Prueba del triggers
SELECT * FROM dbo.TablaTriggers02

INSERT INTO dbo.TablaTriggers01
VALUES (1)

SELECT * FROM dbo.TablaTriggers02
SELECT * FROM dbo.TablaTriggers01

INSERT INTO dbo.TablaTriggers01
VALUES (2),(3),(4)

SELECT * FROM dbo.TablaTriggers02
SELECT * FROM dbo.TablaTriggers01

— Usando los triggers en un conjunto de resultado
USE master
GO
IF EXISTS (SELECT NAME FROM sys.databases
           WHERE name = ‘Auditoria’)
  BEGIN
    DROP DATABASE Auditoria
  END
 
CREATE DATABASE Auditoria
GO

USE Auditoria
GO

CREATE TABLE dbo.Auditoria_Clientes (ROWNUMBER INT IDENTITY,
                        FECHA DATETIMEOFFSET
                        DEFAULT(GETDATE()),
                        USUARIO VARCHAR(300)
                        DEFAULT(SUSER_SNAME()),
                        APLICACION VARCHAR(300)
                        DEFAULT(APP_NAME()),
                        HOST VARCHAR(300)
                        DEFAULT (HOST_NAME()),
                        TIPO CHAR(1)
                        CHECK (TIPO IN(‘D’,’U’,’I’)),
                        CODIGO INT,NOMBRE VARCHAR(100),
                        NOMBRE_OLD VARCHAR(100))
GO

CREATE TABLE dbo.Clientes
(CODIGO INT PRIMARY KEY, NOMBRE VARCHAR(100))
GO

— Creamos tres trigger de Auditoria
CREATE TRIGGER dbo.TriggerInsert ON dbo.Clientes FOR INSERT
AS
SET NOCOUNT ON
 INSERT INTO
dbo.Auditoria_Clientes
 (CODIGO,NOMBRE,TIPO)
 SELECT CODIGO,NOMBRE,’I’ FROM INSERTED
GO

CREATE TRIGGER dbo.TriggerUpdate ON dbo.Clientes FOR UPDATE
AS
SET NOCOUNT ON
 INSERT INTO
dbo.Auditoria_Clientes
 (CODIGO,NOMBRE,NOMBRE_OLD,TIPO)
 SELECT I.CODIGO,I.NOMBRE,D.NOMBRE,’U’
 FROM INSERTED I
 INNER JOIN DELETED D ON
 I.CODIGO = D.CODIGO
 AND I.NOMBRE <> D.NOMBRE
GO
                       
CREATE TRIGGER
dbo.TriggerDelete ON dbo.Clientes FOR DELETE
AS
SET NOCOUNT ON
 INSERT INTO
dbo.Auditoria_Clientes
 (CODIGO,NOMBRE,TIPO)
 SELECT CODIGO,NOMBRE,’D’ FROM DELETED
GO
                      
— Realizamos las pruebas
— Veamos la tabla auditoria (Auditoria_Clientes)

SELECT * FROM dbo.Auditoria_Clientes C

— Insertemos los 3 primeros registros
INSERT INTO dbo.Clientes (CODIGO,NOMBRE)
VALUES (1,’SqlAuditoria’),(2,’Zorros Perú’),(3,’Nada corre como el zorro’)

SELECT * FROM dbo.Auditoria_Clientes C

— Cambiamos el nombre del primer registro
UPDATE dbo.Clientes
SET NOMBRE = ‘SqlAuditoria Perú’
WHERE CODIGO = 1

— Eliminamos el segundo registro
DELETE FROM dbo.Clientes
WHERE CODIGO = 2

SELECT * FROM dbo.Auditoria_Clientes C
ORDER BY FECHA

  1. 23 agosto 2011 a las 2:23 pm

    Gracias, en realidad nunca habia usado Alias para el update!, me has ayudado!

  2. fernando
    14 junio 2012 a las 1:16 pm

    EXCELETE.. MUY bueno el aporte

  3. 27 febrero 2013 a las 7:21 am

    Unquestionably believe that which you stated. Your
    favorite justification appeared to be on the internet the
    easiest thing to be aware of. I say to you, I definitely
    get annoyed while people think about worries that they just don’t know about. You managed to hit the nail upon the top and defined out the whole thing without having side effect , people can take a signal. Will likely be back to get more. Thanks

  1. No trackbacks yet.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: