2010-12-13 59 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 2010-12-13 15:59:22

+0

太簡單了。爲什麼其他人發佈這樣複雜的回覆? – 2018-02-23 15:15:30

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