28

削除前トリガーを作成したい。テーブルからレコードを削除すると、そのレコードを履歴テーブルに挿入する必要があります。SQL Server でこれを行うにはどうすればよいですか?

4

4 に答える 4

37

この状況では、通常の "after" トリガーを実行する方がよいでしょう。これは、この種の状況に対する最も一般的なアプローチです。

何かのようなもの

CREATE TRIGGER TRG_AUD_DEL
ON yourTable
FOR DELETE
AS
     INSERT INTO my_audit_table  (col1, col2, ...)
     SELECT col1, col2...
     FROM DELETED 

テーブルからレコード (またはレコード!) が削除されると、削除された行がテーブルに挿入されますmy_audit_tableDELETEDテーブルは、削除直前のレコードを含む仮想テーブルです。

また、トリガーは削除ステートメントの暗黙的なトランザクションの一部として実行されるため、削除が失敗してロールバックすると、トリガーもロールバックすることに注意してください。

于 2012-05-04T06:34:14.447 に答える
16

使用することもできますINSTEAD OF DELETE

CREATE TRIGGER dbo.SomeTableYouWhatToDeleteFrom
ON dbo.YourTable
INSTEAD OF DELETE
AS
BEGIN

     -- Some code you want to do before delete

     DELETE YourTable
     FROM DELETED D
     INNER JOIN dbo.YourTable T ON T.PK_1 = D.PK_1
END
于 2012-05-04T06:36:06.167 に答える