SQL Server触发多个更新行

时间:2017-02-14 05:25:43

标签: sql-server triggers

我在桌面上使用触发器进行更新。

当我更新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

1 个答案:

答案 0 :(得分:1)

您需要以基于设置的方式编写触发器,并注意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伪表,然后从旧版Name抓取deleted )和新的(Inserted)并将这些 - 以及日期/时间戳 - 插入到历史表中的单个INSERT ... SELECT ....语句中,以处理多行正在更新