12

制約名を指定せずに、スクリプトを使用してテーブルにいくつかの制約を作成しました。その結果、FK__DOC_OBGS___kntr___54E63309たとえば次のような制約が発生しました。

正確な制約名を指定せずにその制約を削除することは可能ですか?

たとえば、このようなもの (これは機能しません)

ALTER TABLE DOC_OBGS_10 DROP CONSTRAINT LIKE 'FK__DOC_OBGS___kntr%'

問題は、このテーブルを含む多くのデータベースがあり、テーブルからすべての制約を削除する必要があることですが、テーブルごとに名前が異なるようです。

4

3 に答える 3

6

SQL の DDL コマンドは like 演算子と連携しません。

ただし、次のように、information_schema ビューを使用して、ドロップ制約コマンド用の SQL を簡単に作成できます。

SELECT 'ALTER TABLE DOC_OBGS_10 DROP CONSTRAINT ' + CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS 
WHERE CONSTRAINT_NAME LIKE 'FK__DOC_OBGS___kntr%'
于 2013-01-19T10:48:46.303 に答える
6
DECLARE @sql1 NVARCHAR(MAX);
SELECT @sql1 = c
FROM
(
    SELECT 'ALTER TABLE DOC_INVS_1 DROP CONSTRAINT ' + CONSTRAINT_NAME + '; '
    FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE TABLE_NAME = 'DOC_INVS_1'
    and CONSTRAINT_NAME LIKE 'FK__DOC_INVS___kntr%' 
) T(c);

EXEC(@sql1);
于 2013-01-20T09:35:30.827 に答える