如何在审计表中保存以前的版本?

时间:2017-08-10 14:48:29

标签: sql sql-server

我创建了下表

CREATE TABLE [dbo].[Audit.Awards]
(SessionID int IDENTITY(1,1) NOT NULL,  
ID INT NOT NULL,
Name  NVARCHAR(max) NOT NULL,  
Abstract  NVARCHAR(max) NOT NULL,    
ChangedDate DATETIME NOT NULL Default GETDATE(),  
ChangedBy NVARCHAR(40) )

我创建了以下触发器

create trigger tIU on [dbo].[Awards] after UPDATE,insert
as
declare @ID int; 
 declare @name varchar(max);
declare @abstract varchar(max);

begin
select @ID=i.ID,@name=i.name,@abstract=i.abstract from inserted i;
insert into [dbo].[Audit.Awards](ID,name, abstract) values(@ID,@name,@abstract)
end

触发器当前将更新中的新数据保存在audit.awards表中。如何保存被覆盖的数据?

1 个答案:

答案 0 :(得分:3)

在触发器中,选择deleted代替inserted

顺便说一下,你应该使用INSERT..SELECT而不是使用局部变量。

insert into [dbo].[Audit.Awards](ID,name, abstract)
select ID,name,abstract from deleted