2011-05-17 46 views
2

我很少寫觸發器。我可以使用幫助設置的東西。SQL觸發器 - 幫助基本面

CREATE TRIGGER audit_tableName 
ON dbo.tableNameAudit 
AFTER CREATE, UPDATE, DELETE on tableName 
AS 
BEGIN 
    --Get Created,updated,deletes items 
    INSERT into dbo.tableNameAudit(columns) VALUES ([allCUDitems]) 

END 
GO 

我該如何獲得一個迭代任何CREATE,UPDATED,DELETED項目,導致觸發?

回答

2

退房this msdn article

短期的它是有2個特殊表,插入和刪除,那是在你觸發訪問。插入將包含更新的行和插入的行,而刪除將包含更新的行和刪除的行。

確保你明白,一個批處理操作的觸發僅觸發一次,所以一定要處理的多行存在這些表中的可能性。

+0

+1好文章。我會試一試。 – 2011-05-17 21:10:16

+0

@Remus Rusanu - 取得了很大進步。如何判斷在觀看INSERT,UPDATE,DELETE時觸發哪個觸發器?從我在文檔中看到的內容看來,我似乎需要在INSERT上插入'',並在UPDATE/DELETE上刪除''。我不在乎UPDATE的審計線索中的新值。 – 2011-05-17 21:53:37

+0

@ P.Brian.Mackey,您可以使用更新功能,這需要一個列名,並告訴你它是否已被更新,或者你可以比較的插入數和刪除的,如果它們是相同的它是一個更新,或者你可以手動從刪除其中inserted和deleted值不」匹配 – 2011-05-17 22:00:16

1

觸發器可以訪問兩個pseudo tablesINSERTEDDELETED。顧名思義,這些僞表將包含從表中添加或刪除的所有值。更新將導致每個僞表中的行。這些僞表的結構與聲明表的表的結構相同。

另外一個觸發器內的UPDATE()功能對於已更新的列返回TRUE。

+0

但我敢肯定的信息將是類似的行,你的鏈接是SQL Server 2008 R2,而不是2000年。 – 2011-05-17 20:56:14

0

您可以使用插入[COLUMN] OR

SELECT [COLUMN] 
FROM INSERTED 

此SQL Server上。

希望它有幫助。

+0

@ user728314如果您突出顯示代碼並按'{}'您將編碼將被格式化 – 2011-05-17 20:55:56