在使用sql脚本添加外键之前检查外键

Ret*_*der 2 sql-server sql-server-2005 sql-server-2008

我有一个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;
Run Code Online (Sandbox Code Playgroud)

有时表已有此外键,因此从Management Studio运行时会显示错误.是否可以在应用密钥之前添加查询以检查密钥是否存在?有一个更好的方法吗?这必须适用于MS SQL 2005和2008.

Joe*_*lli 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;
Run Code Online (Sandbox Code Playgroud)