我想創建一個before刪除觸發器。當我從表中刪除記錄時,必須將記錄插入到歷史記錄表中。我如何在SQL Server中執行此操作?如何在SQL Server中創建before delete觸發器?
19
A
回答
29
在這種情況下,你可能觸發「後」更好做有規律的。這是這種情況最常見的方法。
喜歡的東西
CREATE TRIGGER TRG_AUD_DEL
ON yourTable
FOR DELETE
AS
INSERT INTO my_audit_table (col1, col2, ...)
SELECT col1, col2...
FROM DELETED
會發生什麼事是,當一個記錄(或記錄!)從您的表中刪除,刪除的行會被插入到my_audit_table
的DELETED
表是包含一個虛擬表在刪除前立即記錄。
另外請注意,觸發運行作爲delete語句隱含的交易的一部分,因此,如果您刪除失敗並回滾,觸發也將回滾。
10
你也可以使用INSTEAD OF DELETE
CREATE TRIGGER dbo.SomeTableYouWhatToDeleteFrom
ON dbo.YourTable
INSTEAD OF DELETE
AS
BEGIN
-- Some code you want to do before delete
DELETE YourTable
FROM DELETED D
INNER JOIN dbo.YourTable T ON T.PK_1 = D.PK_1
END
+8
在桌子上的INSTEAD OF DELETE,因爲我有級聯刪除無法使用啓用。 – user1374263
+2
FWIW,你可以改變所有的級聯刪除外鍵爲普通外鍵和處理來自該觸發器中的刪除,這將使它在發生的事情作爲刪除的結果產生一個地方都清楚了。 – Tony
0
這是可以做到在下面的步驟進行,讓我們在這個例子說,我使用的客戶表:
CREATE TABLE CUSTOMERS(
ID INT NOT NULL,
NAME VARCHAR (20) NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR (25) ,
LAST_UPDATED DATETIME,
PRIMARY KEY (ID)
);
創造歷史:
CREATE TABLE CUSTOMERS_HIST( ID INT NOT NULL, NAME VARCHAR (20) NOT NULL, AGE INT NOT NULL, ADDRESS CHAR (25) , LAST_UPDATED DATETIME, PRIMARY KEY (ID) );
觸發源表像下面的刪除事件:
CREATE TRIGGER TRG_CUSTOMERS_DEL ON CUSTOMERS FOR DELETE AS INSERT INTO CUSTOMERS_HIST (ID, NAME, AGE, ADDRESS, LAST_UPDATED) SELECT ID, NAME, AGE, ADDRESS, LAST_UPDATED FROM DELETED
相關問題
- 1. BEFORE DELETE觸發器
- 2. 如何模擬SQL Server 2005中的BEFORE DELETE觸發器
- 3. 在MYSQL中創建BEFORE INSERT觸發器
- 4. 在SQL Server中創建觸發器
- 5. SQL Server 2012.觸發器。如何在創建表時自動創建觸發器
- 6. 在SQL Server表上創建觸發器
- 7. 如何在SQL中創建觸發器?
- 8. 如何在sql中創建觸發器
- 9. 如何在SQL Server 2005中更新觸發器之前創建
- 10. 如何在SQL Server 2012中創建登錄觸發器
- 11. 如何在SQL Server中爲每行創建觸發器
- 12. SQL Server 2008 R2創建觸發器
- 13. SQL Server創建審計觸發器
- 14. 創建歷史觸發器SQL Server 2012
- 15. 在SQL Server在每次創建表創建觸發器2008 R2
- 16. SQL Server 2008 - 如何使用DELETE觸發器更新字段
- 17. 如何在SQL Server 2008上創建插入更新觸發器
- 18. SQL Server:觸發器觸發
- 19. 觸發器(AFTER/BEFORE)在Mysql
- 20. 如何爲自動更新創建觸發器與SQL Server 2008
- 21. 無論如何爲「SELECT」語句創建SQL Server DDL觸發器?
- 22. 如何創建這種SQL觸發器?
- 23. 創建在SQL Server中比較日期的觸發器
- 24. 在sql server 2008中創建一個觸發器
- 25. 在SQL Server中創建審計觸發器
- 26. 創建無法在SQL Server 2005中禁用的觸發器
- 27. 在SQL Server Management Studio 2012中創建觸發器
- 28. SQL服務器 - BEFORE INSERT觸發
- 29. MySQL + delete觸發器
- 30. 如何在SQL Server中創建從引用表中刪除的觸發器
感謝您的答覆,它工作正常 – user1374263
注意到,對於回滾到上一個錯誤,一個try/catch塊可在需要工作觸發器[(示例)](http://dba.stackexchange.com/questions/57909)可能取決於導致錯誤的原因。 – crokusek
好點,但請記住,只適用於RAISEERROR。常規語句終止錯誤(例如,PK違例等)將導致隱式事務的回滾從觸發器之外開始。 –