1

60 個のテーブルがあり、そのうちの 10 個のテーブルを削除したいと考えています。しかし、これらの 10 を削除すると、FK 制約エラーが表示されます。制約を無効にして他のテーブルを削除せずにこれらのテーブルを削除する方法はありますか?

参照されたテーブルからのすべてのデータも切り捨てましたが、それでも FK 制約エラーが表示されます。

私の目的は、これらのテーブルの FK である他のテーブルを削除せずに、テーブルを削除することです。

4

1 に答える 1

4

この SQL ステートメントを使用すると、特定のテーブルを参照するすべての FK 制約を一覧表示できます。また、テーブルを参照している FK 制約を削除する SQL コマンドも提供します。

DECLARE @TableName SYSNAME
SET @TableName = 'dbo.YourTableNameHere'

;WITH ReferencingFK AS 
(
    SELECT 
        fk.Name AS 'FKName',
        OBJECT_NAME(fk.parent_object_id) 'ParentTable',
        cpa.name 'ParentColumnName',
        OBJECT_NAME(fk.referenced_object_id) 'ReferencedTable',
        cref.name 'ReferencedColumnName'
    FROM 
        sys.foreign_keys fk
    INNER JOIN 
        sys.foreign_key_columns fkc ON fkc.constraint_object_id = fk.object_id
    INNER JOIN 
        sys.columns cpa ON fkc.parent_object_id = cpa.object_id AND fkc.parent_column_id = cpa.column_id
    INNER JOIN 
        sys.columns cref ON fkc.referenced_object_id = cref.object_id AND fkc.referenced_column_id = cref.column_id
)
SELECT 
    FKName,
    ParentTable,
    ParentColumnName,
    ReferencedTable,
    ReferencedColumnName,
    DropCmd = 'ALTER TABLE dbo.' + ParentTable + ' DROP CONSTRAINT [' + FKName + ']'
FROM 
    ReferencingFK
WHERE
    ReferencedTable = @TableName
ORDER BY 
    ParentTable, ReferencedTable, FKName

@TableNameしたがって、変数にドロップしたい 10 個のテーブルの 1 つを入れて、これを実行します。そのテーブルを参照するすべての FK 制約を示す出力が得られるはずです。これには、システムからその制約 (制約のみ! 他のテーブルではない) を削除するコマンドを含む列が含まますALTER TABLE .... DROP CONSTRAINT ....

于 2013-02-20T06:27:08.207 に答える