簡體   English   中英

使用觸發器的SQL Server 2005歷史記錄表

[英]SQL Server 2005 history tables using triggers

我有一個表,想要插入要更新或刪除的記錄的當前值。

我嘗試在更新之前和刪除之前創建觸發器,但是SQL Server 2005不喜歡before詞。

我該如何工作?

我希望觸發器獲取當前記錄並將其復制到歷史表,該歷史表是基本表的鏡像,其中添加了兩個字段dateBackedUp (使用getDate())和一個稱為action的字段(使用action'已更新”或“已刪除”)

請幫忙

SQL Server沒有BEFORE INSERTBEFORE DELETE的概念。 實際上,大多數時候實際上不需要在執行操作之前執行這些審計操作-因此只需使用已經具有的AFTER INSERTAFTER UPDATE觸發器即可。

使用已刪除的表是可行的,因為它為我提供了將要更新的數據。 插入的表格提供了新值...而不是我要記錄的值。

當您執行AFTER UPDATE觸發器時, Inserted偽表包含新值Deleted表包含舊值。 因此,對於AFTER UPDATE觸發器,您可以訪問兩個偽表並獲取舊值和新值。

AFTER INSERT觸發器只能訪問包含已插入值的Inserted偽表。

AFTER DELETE觸發器只能訪問Deleted偽表,該表包含Deleted的行的值。

您不需要使用before關鍵字。 您可以正常創建觸發器,然后從deleted表中進行選擇,該觸發器是在觸發觸發器時創建的。

例如

create trigger Audit
on tblCustomers
after update, delete

insert into tblAudit
select * from deleted;

(請耐心等待,因為我在這里沒有SQL Server,但如果無法使用,則Create Trigger的BOL條目應告訴您有關deleted表的信息)

create TRIGGER [update_Project] ON Project
FOR UPDATE
AS
INSERT project_history 
SELECT * FROM deleted

使用已刪除的表是可行的,因為它為我提供了將要更新的數據。 插入的表格提供了新值...而不是我要記錄的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM