sql - 使用 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
在此示例中,如果表不存在,脚本将尝试删除约束时出错。
我应该如何编写这个脚本?
解决方案
您可以检查表是否存在,如此处所述
添加代码以在块中删除约束:
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
推荐阅读
- jenkins - Jenkins管道,如何将工件从以前的构建复制到当前构建?
- ruby-on-rails - 如何修复“Sprockets::FileNotFound: 找不到类型为 'application/javascript' 的文件 'turbolinks'”
- python - 如何在 PyQt 中创建一个类似于 messageBox 的窗口
- javascript - Vue.js open link in new window
- html - 像 Whatsapp 一样,如何在您键入时进行向上延伸的输入?
- tizen - Tizen Web SDK:如何远程调试(Web 检查器)在手表(Galaxy)上运行的 Web 应用程序?
- c - strcmp 的段错误
- android - 我垂直分配底部的 StackLayout 下面有一个间隙?
- go - 为什么我会从这个简单的 Go 代码中得到这样的输出?
- javascript - javascript 函数只能在页面上运行一次