我有以下脚本:
ALTER TABLE [dbo].[TestAccount] DROP CONSTRAINT [TestAccount_Application];
DROP TABLE [dbo].[TestAccount];
但是,如果约束不存在,则脚本失败。检查存在的最佳方法是什么,然后只删除约束和表(如果存在)?
答案 0 :(得分:1)
你不是在说什么样的约束 - 所以我不得不猜...
您可以使用SQL Server系统目录视图在删除对象之前检查对象是否存在 - 例如:
IF EXISTS (SELECT * FROM sys.default_constraint WHERE Name = 'TestAccount_Application')
ALTER TABLE [dbo].[TestAccount]
DROP CONSTRAINT [TestAccount_Application];
IF EXISTS (SELECT * FROM sys.tables WHERE Name = 'TestAccount')
DROP TABLE [dbo].[TestAccount];
正如我所说 - 根据约束的类型,您必须检查其他系统目录视图,例如sys.check_constraints
或sys.foreign_keys
。
答案 1 :(得分:0)
尝试使用count来查找约束:
select CONSTRAINT_SCHEMA, CONSTRAINT_NAME, TABLE_SCHEMA, TABLE_NAME
from INFORMATION_SCHEMA.TABLE_CONSTRAINTS
where TABLE_NAME = 'TableName'
order by CONSTRAINT_TYPE asc -- FOREIGN KEY, then PRIMARY KEY
然后你可以删除约束和表格。