테이블 Absence
에 PK AbscenceId
(철자법 오류가 있음)이 있습니다. 나는 다른 테이블 Note
을 가지고 있으며, 에 AbsenceId
(이번에는 철자가 맞음)이라는 FK가 있습니다. FK 제약 조건은 다음과 같습니다삭제 트리거가 실행되지 않음
ALTER TABLE [dbo].[Note] WITH CHECK ADD CONSTRAINT [FK_Note_Absence] FOREIGN KEY([AbsenceId])
REFERENCES [dbo].[Absence] ([AbscenceId])
GO
Absence
이 삭제되면, 나는 모든 Notes
그것으로 가고 싶어. Note
은 다른 어떤 것에도 속할 수 있기 때문에 나는 CASCADES
으로이 작업을 수행 할 수 없습니다. 결석이 삭제 될 때
그래서 나는 메모를 삭제하는 트리거를 생성 :
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에 이미 삭제 작업이있는 경우에는 사용할 수 없습니다. –
오류 메시지는 꽤 자명하다. 그렇지 않습니까? 'Note'에서 행을 삭제할 수 없으며, 그것을 참조하는 다른 테이블의 행을 정리해야합니다. –
나는 오류를 완전히 이해했다. 나는 방금 전에 트리거를 실행 한 것으로 가정하고 방아쇠가 호출되었다고 확신하지 못했다고 생각한다. – sheamus