我需要在SQL Server 2008中創建觸發器,這些觸發器將一些值更改爲Log表的行從一行中插入!觸發器插入舊值 - 已更新的值
例如,如果我有表僱員有列ID,名稱,密碼,我更新此表並插入新的值的列名稱,比我需要插入表中的更新後,在表日誌中的員工的值。
我該怎麼做?謝謝!
我需要在SQL Server 2008中創建觸發器,這些觸發器將一些值更改爲Log表的行從一行中插入!觸發器插入舊值 - 已更新的值
例如,如果我有表僱員有列ID,名稱,密碼,我更新此表並插入新的值的列名稱,比我需要插入表中的更新後,在表日誌中的員工的值。
我該怎麼做?謝謝!
下面是一個例子更新觸發器:
create table Employees (id int identity, Name varchar(50), Password varchar(50))
create table Log (id int identity, EmployeeId int, LogDate datetime,
OldName varchar(50))
go
create trigger Employees_Trigger_Update on Employees
after update
as
insert into Log (EmployeeId, LogDate, OldName)
select id, getdate(), name
from deleted
go
insert into Employees (Name, Password) values ('Zaphoid', '6')
insert into Employees (Name, Password) values ('Beeblebox', '7')
update Employees set Name = 'Ford' where id = 1
select * from Log
這將打印:
id EmployeeId LogDate OldName
1 1 2010-07-05 20:11:54.127 Zaphoid
在您的觸發器中,您有兩個可用的僞表,Inserted
和Deleted
,其中包含這些值。
對於UPDATE,Deleted
表將包含舊值,而Inserted
表包含新值。
所以,如果你想登錄你的觸發ID, OldValue, NewValue
,你需要寫類似:
CREATE TRIGGER trgEmployeeUpdate
ON dbo.Employees AFTER UPDATE
AS
INSERT INTO dbo.LogTable(ID, OldValue, NewValue)
SELECT i.ID, d.Name, i.Name
FROM Inserted i
INNER JOIN Deleted d ON i.ID = d.ID
基本上,你加入Inserted
和Deleted
僞表,搶ID(這是同樣的,我相信,在這兩種情況下),從Deleted
表中的舊值,從Inserted
表中的新價值,和你的一切存儲在LogTable
在SQL Server 2008中,你可以使用變更數據捕獲這一點。如何設置它放在桌子細節在這裏http://msdn.microsoft.com/en-us/library/cc627369.aspx
createTRIGGER [dbo].[Table] ON [dbo].[table]
FOR UPDATE
AS
declare @empid int;
declare @empname varchar(100);
declare @empsal decimal(10,2);
declare @audit_action varchar(100);
declare @old_v varchar(100)
select @empid=i.Col_Name1 from inserted i;
select @empname=i.Col_Name2 from inserted i;
select @empsal=i.Col_Name2 from inserted i;
select @old_v=d.Col_Name from deleted d
if update(Col_Name1)
set @audit_action='Updated Record -- After Update Trigger.';
if update(Col_Name2)
set @audit_action='Updated Record -- After Update Trigger.';
insert into Employee_Test_Audit1(Col_name1,Col_name2,Col_name3,Col_name4,Col_name5,Col_name6(Old_values))
values(@empid,@empname,@empsal,@audit_action,getdate(),@old_v);
PRINT '----AFTER UPDATE Trigger fired-----.'
你的問題不是很清楚,你可以改換並可能展開。如果你能提供一個你想要的例子,它會有所幫助。 – 2010-07-05 18:01:23
例如我有這樣的價值,如 id 3; 名稱Jon; 密碼Jon; 現在我更新表Employees並更改名稱Jon到Mark,在我更新之前我需要在日誌表中插入值3,Jon,Jon。 – user383875 2010-07-05 18:08:18