2

1 つの列 (主キー) を持つテーブルがあり、そのテーブルに変更を記録するトリガーがあるとします。Deleted で行 (主キー) を更新すると、古い主値があり、Inserted では新しい主値があります。複数行の更新で、古い値 (削除済み) を新しい値 (挿入済み) に結び付けるにはどうすればよいですか?

例えば:

1 つの列を持つ myTable (主キーでもあります):

PK
---
1
2

今、私は 1 を 4 に、2 を 3 に更新します

Deleted
-------
1
2

Inserted
--------
3
4

PK、old_value、new_value の 3 つの列を持つ監査テーブルにこれらの変更を記録するにはどうすればよいですか

Audit Table
-----------
PK | old_value | new_value
1  | 1         | 4
2  | 2         | 3

Oracleには古い値と新しい値がありますが、SQLサーバーにはありません。

4

1 に答える 1

-1

トリガーでカーソルを使用して変更を記録します。

Declare @AuditTable Table (PK Int, OldID int, [NewID] Int)
Declare @OldID Int,
        @NewID Int

Declare C1 Cursor For
Select ID
From Inserted

Declare C2 Cursor For
Select ID
From Deleted

Open C1
Open C2
Fetch Next From C1 Into @NewID
Fetch Next From C2 Into @OldID
While @@FETCH_STATUS=0 Begin
    Insert Into @AuditTable(PK, OldID, [NewID]) 
    Values (@OldID, @OldID, @NewID)

    Fetch Next From C1 Into @NewID
    Fetch Next From C2 Into @OldID
End
Close C1
Close C2
Deallocate C1
Deallocate C2

Select * FRom @AuditTable
于 2012-06-04T09:08:29.437 に答える