在我們的業務規則中,我們需要跟蹤指定哪一行被更改。該表包含根據我們的業務目的指定爲不相關的多個列(例如輸入日期字段,時間戳,審查位字段或接收位字段)。該表有很多列,我試圖找到一個優雅的方式來確定是否有任何相關字段已更改,然後在審計表中記錄條目(輸入行的PK值 - 無法編輯PK)。我甚至不需要知道哪一列實際發生了變化(儘管在這條路上會很好)。將行標識爲排除了某些列中的更改
我能夠通過一個存儲過程來完成它,但它是使用以下語法的更新一個醜陋的SP(OR陳述大大縮短後):
INSERT INTO [TblSourceDataChange] (pkValue)
SELECT d.pkValue
FROM deleted d INNER JOIN inserted i ON d.pkValue=i.pkValue
WHERE ( i.[F440] <> d.[F440]
OR i.[F445] <> d.[F445]
OR i.[F450] <> d.[F450])
我試圖找到一個通用的方式,我可以指定忽略字段和存儲過程仍然可以工作,即使我添加了額外的相關字段到表中。不相關的領域不經常改變,而相關的領域往往更具動態性。
我已經添加了一個新的答案,這是相關的老問題:http://stackoverflow.com/questions/1254787/sql-server-update-trigger-get-only-modified-fields/8020461#8020461 – 2011-11-05 13:36:56