SQLServer級聯刪除的實現
SQLServer 2000與Oracle 8i相比,SQLServer級聯刪除有太多的限制,下面就為您介紹SQLServer級聯刪除的實現方法,供您參考。
表內自關聯不支持級聯刪除和級聯更新
一個表內在有多個列同時關聯于另一個表時,不支持多個級聯刪除
還有什么循環級聯刪除限制,等等
.......
一大堆限制,如果要遷移Oracle到SqlServer麻煩多多,特別對于用于構造樹型結構的表內自關聯(比如部門表)的級聯刪除特別討厭
考慮來考慮去,對于SqlServer不能支持的諸多SQLServer級聯刪除只有采用最原始的方法,徹底不用外鍵關聯,而是用觸發器來解決
以下是經過驗證的觸發器實現范例(自關聯例子)
放棄外鍵關聯后所有的完整性檢查都要通過觸發器實現
--DELETE 級聯刪除,先刪除,再刪除所有級聯的記錄,采用遞歸觸發器,當然要求數據庫支持遞歸觸發器功能開啟(數據庫屬性設置中開啟他),不過SqlServer只支持32級的遞歸啊
- IF EXISTS (SELECT NAME FROM SYSOBJECTS
- WHERE NAME = 'DEL_DOCUMENTTYPE_001' AND TYPE = 'TR')
- DROP TRIGGER DEL_DOCUMENTTYPE_001
- GO
- CREATE TRIGGER DEL_DOCUMENTTYPE_001
- ON dbo.DOCUMENTTYPE
- FOR DELETE
- AS
- IF (SELECT COUNT(*) FROM DELETED) > 0
- DELETE FROM dbo.DOCUMENTTYPE WHERE UPNO IN (SELECT NO FROM DELETED)
- GO
【編輯推薦】