我在桌面上使用触发器进行更新。
当我更新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 :(得分:1)
您需要以基于设置的方式编写触发器,并注意inserted
和deleted
将包含多行 - 所以这些代码行非常糟糕:
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
您需要加入主键上的Inserted
和Deleted
伪表,然后从旧版Name
抓取deleted
)和新的(Inserted
)并将这些 - 以及日期/时间戳 - 插入到历史表中的单个INSERT ... SELECT ....
语句中,以处理多行正在更新