我有一個表Absence
與PK AbscenceId
(是的拼寫錯誤)。我有另一個表Note
,與FK Absence
調用AbsenceId
(這次拼寫正確)。該FK約束是:刪除觸發器不被執行
ALTER TABLE [dbo].[Note] WITH CHECK ADD CONSTRAINT [FK_Note_Absence] FOREIGN KEY([AbsenceId])
REFERENCES [dbo].[Absence] ([AbscenceId])
GO
當Absence
被刪除,我希望所有Notes
去用它。我無法通過CASCADES
這樣做,因爲Note
也可以屬於其他內容。
所以我創建了一個觸發刪除筆記時不存在被刪除:
ALTER TRIGGER [dbo].[TR_OnAbsenceDelete] ON [dbo].[Absence]
FOR DELETE AS
DELETE FROM [Note]
WHERE AbsenceId IN (SELECT AbscenceId FROM Deleted)
但是,當我刪除連有一個Note
的Absence
,我得到:
Msg 547, Level 16, State 0, Line 1
The DELETE statement conflicted with the REFERENCE constraint "FK_Note_Absence". The conflict occurred in database "ReturnToWork", table "dbo.Note", column 'AbsenceId'.
The statement has been terminated.�
這幾乎就像觸發器沒有被執行一樣?
您是否嘗試過使用INSTEAD-OF觸發器?您還必須刪除最初被刪除的記錄。如果您的FK已經有刪除操作,您將無法使用它。 – 2012-07-17 20:18:29
錯誤信息很明顯,不是嗎?您不能只從'Note'中刪除該行,您還必須清除引用它的其他表中的任何行。 – 2012-07-17 20:20:41
我完全明白了錯誤,我想我只是假定觸發器之前沒有執行過,並且不確定觸發器是否被調用。 – sheamus 2012-07-18 01:07:23