2010-09-15 249 views
0

我有一個表並希望插入正在更新或刪除的記錄的當前值。使用觸發器的SQL Server 2005歷史記錄表

我試圖在更新前和刪除前創建觸發器,但SQL Server 2005不喜歡前面的單詞。

我如何得到這個工作?

我想觸發取當前記錄,並將其複製到歷史表是基表與dateBackedUp兩個附加字段(即需要GETDATE())和場稱爲action鏡(即採取行動「更新」或刪除「)

請幫助

+0

請發佈您正在嘗試的代碼。 – 2010-09-15 15:31:57

回答

1

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

使用已刪除的表工作,它 給了我將要 更新的數據。插入的表格提供了 新的值...不是我想要 進行記錄的那些值。

當你做一個AFTER UPDATE觸發時,Inserted僞表中包含的新的價值觀 - 與Deleted表包含舊值。因此,對於AFTER UPDATE觸發器,您可以訪問兩個僞表並獲取舊值和新值。

AFTER INSERT觸發器只能訪問Inserted僞表,其中包含插入的值。

AFTER DELETE觸發器只能訪問Deleted僞表,其中包含已刪除的行的值。

0

你並不需要使用before關鍵字。您可以像平常一樣創建一個觸發器,然後從deleted表中選擇,該表在觸發器被...觸發時創建。

create trigger Audit 
on tblCustomers 
after update, delete 

insert into tblAudit 
select * from deleted; 

(未經測試,因爲我不這裏有一個SQL服務器,但如果不工作,那麼對於Create Trigger的BOL條目應該告訴你關於deleted表)

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

使用已刪除的表格的作品,因爲它給了我將被更新的數據。插入的表提供了新的值...不是我想要記錄的值。

+0

如果您發佈的是代碼或XML,**請**在文本編輯器中突出顯示這些行,然後單擊編輯器工具欄上的「代碼」按鈕(101 010),以良好地格式化和語法突出顯示它!另外:您應該通過編輯**更新**原始問題,而不是自己添加「虛擬」答案...... – 2010-09-15 16:46:28