【发布时间】:2015-02-17 20:18:34
【问题描述】:
我正在寻找一种方法,让触发器仅在表 1 中的值发生变化时才插入到第二个表中。它本质上是一个审计工具,用于捕获所做的任何更改。表 1 中的字段是价格,我们要编写其他字段。
这是我目前所拥有的。
CREATE TRIGGER zmerps_Item_costprice__update_history_tr ON [ITEM]
FOR UPDATE
AS
insert into zmerps_Item_costprice_history
select NEWID(), -- unique id
GETDATE(), -- CURRENT_date
'PRICE_CHANGE', -- reason code
a.ima_itemid, -- item id
a.ima_price-- item price
FROM Inserted b inner join item a
on b.ima_recordid = a.IMA_RecordID
该表仅包含唯一标识符、日期、参考(项目)和更改的字段(价格)。它记录了任何变化,而不仅仅是价格变化
【问题讨论】:
-
您可以编辑您的问题并格式化触发代码以便我们阅读吗?因为它坐在那里,所以很难破译应该在那里的东西,因为格式丢失了,而且里面到处都是 cmets。
-
执行更新查询时,更改的行同时位于
inserted和deleted中(分别具有新值和旧值)。您可以在主键上加入这些以获取更新的行,然后您可以检查是否只有价格发生了变化。它可能比连接整个表要快一些。
标签: sql sql-server triggers