新聞中心
SQLServer 2000與Oracle 8i相比,SQLServer級(jí)聯(lián)刪除有太多的限制,下面就為您介紹SQLServer級(jí)聯(lián)刪除的實(shí)現(xiàn)方法,供您參考。

表內(nèi)自關(guān)聯(lián)不支持級(jí)聯(lián)刪除和級(jí)聯(lián)更新
一個(gè)表內(nèi)在有多個(gè)列同時(shí)關(guān)聯(lián)于另一個(gè)表時(shí),不支持多個(gè)級(jí)聯(lián)刪除
還有什么循環(huán)級(jí)聯(lián)刪除限制,等等
.......
一大堆限制,如果要遷移Oracle到SqlServer麻煩多多,特別對(duì)于用于構(gòu)造樹(shù)型結(jié)構(gòu)的表內(nèi)自關(guān)聯(lián)(比如部門(mén)表)的級(jí)聯(lián)刪除特別討厭
考慮來(lái)考慮去,對(duì)于SqlServer不能支持的諸多SQLServer級(jí)聯(lián)刪除只有采用最原始的方法,徹底不用外鍵關(guān)聯(lián),而是用觸發(fā)器來(lái)解決
以下是經(jīng)過(guò)驗(yàn)證的觸發(fā)器實(shí)現(xiàn)范例(自關(guān)聯(lián)例子)
放棄外鍵關(guān)聯(lián)后所有的完整性檢查都要通過(guò)觸發(fā)器實(shí)現(xiàn)
--DELETE 級(jí)聯(lián)刪除,先刪除,再刪除所有級(jí)聯(lián)的記錄,采用遞歸觸發(fā)器,當(dāng)然要求數(shù)據(jù)庫(kù)支持遞歸觸發(fā)器功能開(kāi)啟(數(shù)據(jù)庫(kù)屬性設(shè)置中開(kāi)啟他),不過(guò)SqlServer只支持32級(jí)的遞歸啊
- 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
名稱欄目:SQLServer級(jí)聯(lián)刪除的實(shí)現(xiàn)
文章分享:http://m.fisionsoft.com.cn/article/dhjgojj.html


咨詢
建站咨詢
