我有以下脚本:
ALTER TABLE [dbo].[TestAccount] DROP CONSTRAINT [TestAccount_Application];
DROP TABLE [dbo].[TestAccount];
但是,如果约束不存在,则脚本将失败。检查是否存在然后仅删除约束和表(如果存在)的最佳方法是什么?
我有以下脚本:
ALTER TABLE [dbo].[TestAccount] DROP CONSTRAINT [TestAccount_Application];
DROP TABLE [dbo].[TestAccount];
但是,如果约束不存在,则脚本将失败。检查是否存在然后仅删除约束和表(如果存在)的最佳方法是什么?
你不是说那是什么样的约束 - 所以我必须猜测......
您可以使用 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
代替。
您可以在MSDN SQL Server 联机丛书中阅读有关系统目录视图的更多信息
尝试使用 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
然后你可以删除约束和表。