2010-04-28 3 views
5

우리는 SQL Server 2005 DB에서 일부 외래 키에 On Delete Cascade 속성 집합이 없다는 것을 알고 있습니다. 이는 일부 레코드를 삭제하려고 할 때 몇 가지 참조 오류가 발생한다는 것을 의미합니다.ON DELETE CASCADE로 외래 키 제약 조건을 업데이트하지 않습니까?

Management Studio를 사용하여 DROPCREATE SQL을 스크립팅했지만 CREATE이 올바르게 작동하지 않는 것으로 보입니다.

DROP :

USE [FootprintReports] 
GO 
IF EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK__SUBSCRIPTIONS_Reports]') AND parent_object_id = OBJECT_ID(N'[dbo].[_SUBSCRIPTIONS]')) 
ALTER TABLE [dbo].[_SUBSCRIPTIONS] DROP CONSTRAINT [FK__SUBSCRIPTIONS_Reports] 

내가 수동에서의 값을 삭제하고 재 작성한 후에 GUI에서 삭제를 변경하는 경우에 삭제 CREATE

USE [FootprintReports] 
GO 
ALTER TABLE [dbo].[_SUBSCRIPTIONS] WITH CHECK ADD CONSTRAINT [FK__SUBSCRIPTIONS_Reports] FOREIGN KEY([PARAMETER_ReportID]) 
REFERENCES [dbo].[Reports] ([ID]) 
ON DELETE CASCADE 
GO 
ALTER TABLE [dbo].[_SUBSCRIPTIONS] CHECK CONSTRAINT [FK__SUBSCRIPTIONS_Reports] 

가 제대로되지 않습니다 업데이트되었습니다.

테스트에서 GUI의 삭제 규칙을 Set Null으로 설정했습니다. 올바르게 삭제되고 오류없이 재생성되었습니다. GUI로 돌아 가면, 여전히 Set Null이 삭제 규칙으로 표시됩니다.

내가 잘못 했나요? 또는 ON DELETE CASCADE 규칙을 추가하기 위해 제약 조건을 편집하는 다른 방법이 있습니까?

답변

7

귀하의 접근 방식이 올바른 것처럼 보입니다. ALTER TABLE은 제약 조건을 편집하는 유일한 방법입니다. 아마도 Management Studio에는 데이터 새로 고침이 필요합니다. 새로 고침을 마우스 오른쪽 버튼으로 클릭하거나 앱을 닫은 다음 다시 엽니 다.

+0

음, 건배. 나는 그것을 살펴볼 것이다. –

+1

네, 이것이 문제였습니다. 어떤 이유로 Management Studio는 여전히 오래된 가치를 보여주었습니다. 변경 사항을 표시하기 전에 앱을 닫고 다시 시작해야했습니다. 감사! –

관련 문제