如果它们存在,我怎么才能删除一个表和一个约束?

时间:2013-03-25 04:43:35

标签: sql-server

我有以下脚本:

        ALTER TABLE [dbo].[TestAccount] DROP CONSTRAINT [TestAccount_Application];
        DROP TABLE [dbo].[TestAccount];

但是,如果约束不存在,则脚本失败。检查存在的最佳方法是什么,然后只删除约束和表(如果存在)?

2 个答案:

答案 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_constraintssys.foreign_keys

您可以在MSDN SQL Server Books Online

上阅读有关系统目录视图的更多信息

答案 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

然后你可以删除约束和表格。