1

我有以下脚本:

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

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

4

2 回答 2

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 联机丛书中阅读有关系统目录视图的更多信息

于 2013-03-25T05:26:37.720 回答
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

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

于 2013-03-25T04:50:15.570 回答