MS SQL中使用trigger的遞迴刪除

MS SQL中使用trigger的遞迴刪除

很多時候,我們都會用到樹狀結構的資料,
而資料表的欄位通常如下

NodeId ParentId
索引碼 上層代碼

要刪除資料時,如果你會寫trigger的話,

應該也會想要用trigger去自動刪除所有子結點,

不過當你真的在寫這樣的功能時,應該會發現怎麼刪都只有第一層被刪,

第二層以下都還是存在.似乎trigger中的刪除並不會觸發trigger(自己).也就是沒有遞迴的效果.

這主要是因為資料庫的設定,

在預設的情況下,資料庫是將trigger的遞迴功能設為false.

如果要啟用的話.

可以輸入下列指令修改

ALTER DATABASE <db_name> SET RECURSIVE_TRIGGERS ON

不過,如果要啟用這功能的話,後果自負...

 

參考資料 :

http://www.sqlmag.com/Article/ArticleID/23123/sql_server_23123.html

ps.此參考資料要看完整內容需要登入,但不登入的話,在文章最前面可以直接下載範例檔