2017-02-14 137 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 ....聲明中以處理多行正在更新