[英]SQL Server 2005 history tables using triggers
我有一個表,想要插入要更新或刪除的記錄的當前值。
我嘗試在更新之前和刪除之前創建觸發器,但是SQL Server 2005不喜歡before詞。
我該如何工作?
我希望觸發器獲取當前記錄並將其復制到歷史表,該歷史表是基本表的鏡像,其中添加了兩個字段dateBackedUp
(使用getDate())和一個稱為action
的字段(使用action'已更新”或“已刪除”)
請幫忙
SQL Server沒有BEFORE INSERT
或BEFORE DELETE
的概念。 實際上,大多數時候實際上不需要在執行操作之前執行這些審計操作-因此只需使用已經具有的AFTER INSERT
和AFTER 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.