首页 > 解决方案 > 使用 SQL Server 2016 语法如何在表本身可能存在或不存在时使用删除约束“如果存在”?

问题描述

我研究了如何在 SQL Server 2016 中删除数据库项时测试表或约束是否存在,并了解到“如果存在”语法可用于此目的。但是我还没有弄清楚如何删除表的约束,然后删除表本身,以防在没有脚本错误的情况下表本身可能存在也可能不存在。

-- Drop TABLE1
alter table TABLE1 drop constraint if exists F_TABLE1_COLUMN1
go
alter table TABLE1 drop constraint if exists F_TABLE1_COLUMN2
go
alter table TABLE1 drop constraint if exists P_TABLE1_COLUMN2
go
drop table if exists TABLE1
go

在此示例中,如果表不存在,脚本将尝试删除约束时出错。

我应该如何编写这个脚本?

标签: sqlsql-server

解决方案


您可以检查表是否存在,如此处所述

添加代码以在块中删除约束:

IF (EXISTS (SELECT * 
                 FROM INFORMATION_SCHEMA.TABLES 
                 WHERE TABLE_SCHEMA = 'dbo' 
                 AND  TABLE_NAME = <table_name>))
BEGIN
    ALTER TABLE <table_name>   
    DROP CONSTRAINT <Constraint_name>;
END

推荐阅读