2009-02-05 172 views
18

如何在T-SQL 2005的刪除之前觸發觸發器? FOR事實上會在事件後觸發,而且在TRIGGER函數中它們看起來沒有BEFORE參數。 INSTEAD OF不是我想要的。 我需要在刪除記錄之前啓動。 任何想法?如何在T-SQL 2005的刪除之前觸發觸發器?

+0

謝謝Tom,Mitch和Steven – Fet 2009-02-06 08:47:53

回答

28

您可以使用INSTEAD OF選項,只需在末尾顯式刪除行即可。例如:

CREATE TRIGGER dbo.My_Table_Delete_Instead_Of_Trigger 
ON dbo.My_Table 
INSTEAD OF DELETE 
AS 
BEGIN 

    -- Do some stuff here 

    DELETE T 
    FROM DELETED D 
    INNER JOIN dbo.My_Table T ON T.PK_1 = D.PK_1 AND T.PK_2 = D.PK_2 
END 

這假定一個主鍵由列PK_1和PK_2組成。

5

你不能。但是您可以在AFTER DELETE觸發器中執行回滾。

0

你不能。你可以做的是檢查DELETE表並撤消刪除,如果你需要的話。

這裏是事件的順序:

  • 發送DELETE命令到SQL Server
  • 項目從表
  • OnDelete觸發器觸發如果邏輯未能執行您的
  • 邏輯刪除/通行證/什麼,撤銷刪除
+0

這對於「刪除之前」觸發器最常見的用例沒有幫助 - 級聯刪除 - 這讓我對你在刪除操作中會做什麼感到困惑。 – 2013-05-28 06:39:22

+1

我通常使用OnDelete觸發器創建一個元素在給定時間被用戶刪除的歷史記錄條目。 – 2013-05-28 14:53:35