如何编写满足以下场景的查询/触发器?

时间:2017-06-05 12:08:31

标签: sql-server triggers

SQL Server中需要的解决方案。

假设有2个表

  1. TICKET表格包含以下内容:

    • item_id - PK
    • ticket_cost
  2. TICKET_PAST包含列:

    • 价格 - FK
    • ticket_new_cost
  3. 问题是编写一个触发器,以便每当插入,更新或删除TICKET表中的价格时,触发器都会生成一个新行?

1 个答案:

答案 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

参考: