トリガーを作成していて、行を編集するときに、削除済みと挿入済みのすべての列を解析したいとします。したがって、Deletedのcol1がInsertedのcol1と異なる場合、この変更を別のテーブルに保存します。これは私がこれを達成した方法ですが、私はそれを動的にしたいと思います。 ** **トリガーは、あるべき非常に小さく、軽快**を、それが可能な作業の**最小限の量を行う必要があります..:警告の削除済みと挿入済みの各列のSQL
IF UPDATE(Cisitid)
insert into [dbo].[AuditTrailCTables]([TSid],[TableName],[TSField],[OldValue],
[NewValue],[changedate],[Change_Action],[Change_user],[Columns_Updated])
select Cisitid,@tablename,'Cisitid', @audit_oldvalue,
@audit_value,getdate(),@Action, coalesce(ModifiedBy,suser_name()), 'Cisitid'
from inserted
etc..
Wordを:
–[CDC](https://docs.microsoft.com/en-us/sql/relational-databases/track-changes/track-data-changes-sql-server)を試しましたか? –
トリガーには大きな根本的な欠陥があります。挿入されたテーブルと削除されたテーブルには1つの行しか存在しないことが前提です。 SQL Serverでは、トリガーは操作ごとに1回トリガーされるため、トリガーを基に設定する必要があります。これは、2行でさえ影響を与える挿入または更新では悲惨に失敗します。 –