2017-02-14 89 views
0

我正在使用我的表上的触发器进行更新。SQL Server触发多个更新行

当我更新1行时,它工作。但是,当我一次更新20行时,日志只显示1个历史记录更新。

我想显示所有更新的行。如何做到这一点?

这是我简单的SQL:

create trigger Triger_Update_Product 
on product 
for update 
as begin 
    declare @first char(10) 
    declare @after char(10) 

    select @first = name from deleted 

    select @after = name from inserted 

    insert into historyproduk 
     select @first, @after, getdate() 
end 
+0

https://msdn.microsoft.com/en-in/library/ms190752.aspx –

回答

0

你需要写在基于集合的时尚触发并意识到,inserteddeleted将包含多行 - 所以这行代码是非常糟糕:

select @first = name from deleted 
select @after = name from inserted 

这些从设置更新选择任意一行 - 一个他们忽视所有其他行。 不要这样做!

试试这个:

create trigger Trigger_Update_Product 
on product 
for update 
as begin 
    insert into historyproduk 
     select d.name, i.name, getdate() 
     from deleted d 
     inner join inserted i on d.PrimaryKey = i.PrimaryKey 
end 

你需要加入主键InsertedDeleted假表,然后抓住从老Namedeleted)和新(Inserted),并插入那些 - 连同日期/时间戳 - 放入历史表中的单个INSERT ... SELECT ....声明中以处理多行正在更新