あなたはあなたのアプリケーションのユーザーがマップされている場合は、知っておく必要がありますどのようにlog sql table data changes using triggers呼ばチュートリアルここ
での例を見つけることができるデータベースのテーブル 上のデータの変更を追跡するためにトリガーを使用することができますUPDATE、DELETE、またはINSERTコマンドでは、テーブルのフィールド値として明示的にユーザー情報をinsertedby、updatedby、またはdeletedbyに渡す必要があります。そうでなければ、何を取得することは、あなたがテーブルに使用したり、履歴テーブルを作成するか、ログインする必要があり、すべてのトランザクション
だけトンemporal tables on SQL Server 2016のように同じユーザーになり、手動で
SQLトリガーコード
以下をご確認ください
CREATE TRIGGER dbo.LogTbl
ON dbo.Tbl
AFTER INSERT, UPDATE, DELETE
AS
IF EXISTS (
SELECT * FROM Inserted
) -- INSERT or UPDATE
BEGIN
IF EXISTS (
SELECT * FROM Deleted
)
-- UPDATE Statement was executed
INSERT INTO HistoryTbl (
...
UpdatedDate,
UpdatedByUserId
)
SELECT
...
i.UpdatedDate,
i.UpdatedByUserId
FROM Deleted d
INNER JOIN Inserted i ON i.Id = d.Id
ELSE
-- INSERT Statement was executed
INSERT INTO HistoryTbl (
...
InsertedDate,
InsertedByUserId
)
SELECT
...
i.InsertedDate,
i.InsertedByUserId
FROM Inserted i
END
ELSE
-- DELETE Statement was executed
INSERT INTO HistoryTbl (
...
DeletedDate,
DeletedByUserId
)
SELECT
GETDATE(), ---!!!
USER_ID() ---!!!
FROM Deleted
GO
注意を払うには、コマンドを削除するには、[削除]コマンドで、我々はdeletedbyユーザデータを持っていません。 USER_ID()を使用してUSER_NAME()を使用することもできます。
行を削除する代わりに、ACTIVE列の値をfalseにUPDATEすることでDELETEできます。私は更新データを意味する、それはあなたがアクティブなフィールドを0に設定した、これはそれが削除されたと考えることができます。
アクティブなデータのみを選択してすべてのコードを変更する必要があります。
このデータ*監査*または*履歴*の目的はありますか?歴史のために、新しいテンポラルテーブルの特徴を考慮する必要があるかもしれません。 –
私は歴史と監査が同じものであると見る。ダミアンは、最良の方法は、時間的なテーブルを使用している提供するよう急所1)私たちは、おそらくテーブル構造を定義できるようにする必要があるということである、2)アプリケーションページは、履歴テーブルについて監査/一時テーブル – user1340582
を照会できるようにする必要があります。http:/ SQL Serverの2016年に/www.kodyaz.com/sql-server-2016/create-sql-server-2016-temporal-table.aspx残念ながら、これらのテーブルは、 – Eralper