次のスクリプトがあります。
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 Books Onlineを参照してください。
これを試して、カウントを使用するだけで制約を見つけてください。
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
次に、制約とテーブルを削除できます。