我有:級聯刪除通觸發
表 「項目」 與PK ID
的表的 「區段」 與PK ID和FK專案編號
表「卡爾斯「與PK ID和FK了zoneid
觸發:
ALTER TRIGGER [DBO]。[DeleteProject] ON [DBO]。[項目] INSTEAD OF DELETE AS DECLARE @ProjectID INT SELECT @ProjectID = deleted.ID FROM刪除
DELETE區域,其中專案編號= @專案編號
DELETE項目 FROM DELETED d INNER JOIN項目T ON T.ID = D.ID
觸發:
ALTER TRIGGER [DBO]。[DeleteZone] ON [DBO]。[區域] INSTEAD OF DELETE AS DECLARE @ZoneID INT SELECT @ZoneID = deleted.ID FROM刪除
DELETE卡爾斯WHERE =了zoneid @ZoneID
DELETE [區域] FROM DELETED d INNER JOIN [區域] T ON T.ID = D.ID
一般它的工作原理和工作正常,但我得到一個錯誤
{「DELETE語句與REFERENCE約束條件衝突 \」FK_Cals_Zones \「。衝突發生於數據庫\ 「PlasmaAir \」, 表\ 「dbo.Cals \」,列 '了zoneid'。\ r \ n此語句已 終止。「}
時 1.區段有2次記錄相同的專案編號 2.計算器與從了zoneid#1
至少一個記錄爲什麼會發生,以及如何解決呢?
第一件事,你的觸發器是嚴重designed.YOu決不能有西港島線只有一個插入或刪除表中的記錄,所以從他們的一個設定值,一個標量意味着觸發需要重寫。 – HLGEM
你似乎有觸發火災每排一次誤解。在sql服務器觸發每個操作觸發一次。在SQL Server觸發器都必須根據設置或您遇到的各種問題。 –
OK,怎麼是正確的。讓我們看看第一個觸發器。行正在刪除並調用此觸發器。然後刪除項目ID的值被設置爲@ProjectID。然後刪除鏈接到此ProjectID的所有區域(即2個區域)。每個刪除區域操作都會調用第二個觸發器(彼此獨立)。對觸發器工作的理解是否正確? –