0
我有一個表在我的SQL Server數據庫中引用,我使用它與LINQ到SQL。LINQ到SQL:與觸發器相同的參考約束
我在這個表上創建了一個觸發器來處理刪除行。
ALTER TRIGGER [dbo].[TrgDeleteCalculation]
ON [dbo].[Calculation]
INSTEAD OF DELETE
AS
BEGIN
DELETE FROM Calculation WHERE CalcParentId IN (SELECT CalculationId FROM deleted)
DELETE FROM Calculation WHERE CalculationId IN (SELECT CalculationId FROM deleted)
END
當我嘗試在DataModel中執行刪除操作時,會出現問題。
當我這樣做時,出現以下異常: DELETE語句與SAME TABLE REFERENCE約束「FK_calculations_calculations」衝突。衝突發生在數據庫「DesignDb」,表「dbo.Calculation」,列「CalcParentId」中。 該聲明已被終止。
我懷疑觸發器不會被觸發...
是這樣的話,或可能是別的東西嗎?
不應該觸發採取照顧?我假設在刪除子行時觸發器也會運行,然後刪除所有的子記錄等等......?簡單的遞歸(或者至少應該是)。 – 2012-04-29 16:27:12
From [BOL](http://msdn.microsoft.com/zh-cn/library/ms189799.aspx):如果在表上定義的INSTEAD OF觸發器對通常會觸發INSTEAD OF觸發器的表執行語句同樣,該觸發器不會被遞歸調用。相反,該語句的處理方式與表沒有INSTEAD OF觸發器一樣,並啓動約束操作鏈和AFTER觸發器執行。 – 2012-04-29 17:25:17
嗯,好的。所以觸發器對我而言幾乎沒用?我正在考慮留下整個想法,並使用LINQ to SQL DataModel來遞歸刪除所有行... – 2012-04-30 11:45:44