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_constraintsまたはsys.foreign_keys代わりに、他のシステム カタログ ビューを確認する必要があります。

システム カタログ ビューの詳細については、MSDN SQL Server Books Onlineを参照してください。

于 2013-03-25T05:26:37.720 に答える
0

これを試して、カウントを使用するだけで制約を見つけてください。

  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 に答える