- Hacer triggers para insert,update y delete
- Hacer un trigger que registre cuando se ejecuto una sentencia sql y cual fue la sesión que la ejecuto
- Hacer procedimientos almacenados para insertar,borrar y modificar la auditoria
1.- Para que a alguien le toque algo similar y no pierda su tiempo averiguando aquí yo hice algo así.Primero creamos las la base de datos contonso, con la tabla employee y salary:
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO --creamos la base de datos CREATE DATABASE contoso GO --usamos la base de datos USE contoso GO CREATE TABLE employee( ID INT , name VARCHAR(10) , salary INT , start_date DATETIME , city VARCHAR(10) , region char(1)) GO CREATE TABLE salary( region char(1) , city VARCHAR(10) , sum_salary INT ) GO CREATE TABLE Auditors( ID INT , Fecha_Creacion datetime , Login nvarchar(50)) GO --datos de prueba insert into employee (ID, name, salary, start_date, city,region) values (1, 'Jason', 40420, '02/01/94', 'New York', 'W'); insert into employee (ID, name, salary, start_date, city,region) values (2, 'Robert',14420, '01/02/95', 'Vancouver','N'); insert into employee (ID, name, salary, start_date, city,region) values (3, 'Celia', 24020, '12/03/96', 'Toronto', 'W'); insert into employee (ID, name, salary, start_date, city,region) values (4, 'Linda', 40620, '11/04/97', 'New York', 'N'); CREATE TRIGGER salario ON employee AFTER INSERT AS BEGIN SET NOCOUNT ON; Declare @salario int Declare @region char(1) Declare @city varchar(10) Declare @region_test char(1) Select @salario = (Select [salary] From Inserted) Select @region = (Select [region] From Inserted) SELECT @city = (select [city] From Inserted) Select @region_test =(Select [region] From [dbo].[salary] where @region=[region]) if @region_test is NULL INSERT INTO [dbo].[salary] ([region],[city],[sum_salary]) VALUES(@region,@city,@salario) ELSE update [dbo].[salary] set [sum_salary]= [sum_salary]+@salario where [region]=@region END GO CREATE TRIGGER nuevo_salario ON employee AFTER update AS BEGIN SET NOCOUNT ON Declare @salario_nuevo int Declare @salario_viejo int Declare @region char(1) Declare @diferencia int Select @region = (Select [region] From Inserted) Select @salario_nuevo = (Select [salary] From Inserted) Select @salario_viejo = (Select [salary] From deleted) SET @diferencia= @salario_nuevo - @salario_viejo update [dbo].[salary] set [sum_salary]= [sum_salary]+@diferencia where [region]=@region END GO CREATE TRIGGER despedido ON employee AFTER delete AS BEGIN SET NOCOUNT ON Declare @salario_despedido int Declare @region char(1) Select @region = (Select [region] From deleted) Select @salario_despedido = (Select [salary] From deleted) update [dbo].[salary] set [sum_salary]= [sum_salary]-@salario_despedido where [region]=@region END GO --para auditar CREATE TRIGGER [dbo].[audit] ON [dbo].[Test] AFTER INSERT AS BEGIN Declare @id int set @id=(Select ID from inserted) insert into [dbo].[Auditor]([ID],[Fecha_Creacion],[Login]) values(@id,Getdate(),ORIGINAL_LOGIN( )) END GO --Insertar en la tabla dado como parámetro el valor que tiene CREATE PROCEDURE addrow @id int,@fecha datetime , @usuario nvarchar(50) AS insert into Auditor([ID],[Fecha_Creacion],[Login]) values(@id,@fecha,@usuario) GO --Borra un registro de la tabla dado el ID CREATE PROCEDURE delrow @id int as delete from [dbo].[Auditor] where ID=@ID GO --Actualizar el valor de la tabla CREATE PROCEDURE uprow @id int,@usuario nvarchar(50) AS Declare @num int IF EXISTS (SELECT * FROM [dbo].[Auditor] WHERE ID = @id) BEGIN update [dbo].[Auditor] set [Login]=@usuario where ID=@id set @num=(select count(ID) from [dbo].[Auditor] where ID=@id) select 'Fueron afectadas un total de '+ cast(@num as varchar)+' Columna(s)' END ELSE select 'El ID No Existe' G0 --Ejemplo de Como Usarlo exec addrow 1,'2012-05-24 17:23:57.967','MiDominio\PINTOLAND'
No comments:
Post a Comment