2010-12-13 4 views
2

다음과 같이 외래 키를 테이블에 추가하는 SQL 스크립트가 있습니다.SQL 스크립트로 추가하기 전에 외래 키 확인하기

ALTER TABLE [security].[Pages] WITH NOCHECK 
ADD CONSTRAINT [FK_Pages_PageClasses] FOREIGN KEY ([PageClassId]) REFERENCES [security].[PageClasses]([PageClassId]) ON DELETE NO ACTION ON UPDATE NO ACTION; 

가끔 테이블에 이미이 외부 키가 있으므로 Management Studio에서 실행할 때 오류가 표시됩니다. 그것을 적용하기 전에 키가 존재하는지 확인하기 위해 쿼리를 추가 할 수 있습니까? 이 작업을 수행하는 더 좋은 방법이 있습니까? 이것은 MS SQL 2005 및 2008에서 작동해야합니다.

답변

11

존재 여부를 테스트하려면 OBJECT_ID 함수를 사용하십시오.

IF OBJECT_ID('[security].[FK_Pages_PageClasses]') IS NULL 
    ALTER TABLE [security].[Pages] WITH NOCHECK 
     ADD CONSTRAINT [FK_Pages_PageClasses] FOREIGN KEY ([PageClassId]) REFERENCES [security].[PageClasses]([PageClassId]) ON DELETE NO ACTION ON UPDATE NO ACTION; 
+0

이 사람은 나를 위해 작동합니다. 많은 감사합니다. – Retrocoder

+0

간단합니다. 왜 다른 사람들은 그렇게 복잡한 답글을 게시 했습니까? –

1

당신은 sys.foreign_keys object catalog view 조사하여 외래 키의 존재 여부를 확인할 수 있습니다

IF NOT EXISTS(SELECT * FROM sys.foreign_keys WHERE object_id = object_id(N'[Security].[FK_Pages_PageClasses]') and parent_object_id = object_id(N'[Security].[Pages]')) 
BEGIN 
    ALTER TABLE [security].[Pages] WITH NOCHECK 
    ADD CONSTRAINT [FK_Pages_PageClasses] FOREIGN KEY ([PageClassId]) REFERENCES [security].[PageClasses]([PageClassId]) ON DELETE NO ACTION ON UPDATE NO ACTION; 
END