2

假设我有一个包含一列(主键)的表,并且我在该表上有触发器来记录任何更改。现在,当在 Deleted 中更新一行(主键)时,我有旧的主值,而在 Inserted 中,我有新的主值。在多行更新中,如何将旧值(在已删除中)绑定到新值(在插入中)?

例如:

myTable 一列(也是主键):

PK
---
1
2

现在我更新 1 到 4 和 2 到 3

Deleted
-------
1
2

Inserted
--------
3
4

如何在具有三列的审计表中记录这些更改:PK、old_value、new_value

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

在 oracle 中,我们有旧值和新值,但在 sql server 中没有。

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 回答