SQL Server中需要的解决方案。
假设有2个表
TICKET
表格包含以下内容:
TICKET_PAST
包含列:
问题是编写一个触发器,以便每当插入,更新或删除TICKET
表中的价格时,触发器都会生成一个新行?
答案 0 :(得分:2)
使用after update
触发器,访问inserted
中的新值和deleted
中的旧值:
create trigger dbo.item_price_update_trigger
on dbo.item
after update as
begin;
set nocount on;
insert into item_hist (item_id, price, new_price)
select i.item_id, d.price, i.price
from inserted i
inner join deleted d
on i.item_id = d.item_id
end;
go
rextester演示:http://rextester.com/PBB85814
<小时/> 此触发器可以回答您的问题,但很可能只是完整审核/历史解决方案的三个触发器之一。您可能需要after insert
的触发器来存储项目的初始插入,以及after delete
触发器来记录已删除项目的最终价格。
您可能还希望包含这些操作发生的日期,以便您可以查询给定时间项目的有效价格。
对于创建审计/历史记录表和相关触发器的某种自动化选项,本文和相关脚本可能会有所帮助:Quick And Easy Audit Tables - Dave Britten
参考: