60 個のテーブルがあり、そのうちの 10 個のテーブルを削除したいと考えています。しかし、これらの 10 を削除すると、FK 制約エラーが表示されます。制約を無効にして他のテーブルを削除せずにこれらのテーブルを削除する方法はありますか?
参照されたテーブルからのすべてのデータも切り捨てましたが、それでも FK 制約エラーが表示されます。
私の目的は、これらのテーブルの FK である他のテーブルを削除せずに、テーブルを削除することです。
60 個のテーブルがあり、そのうちの 10 個のテーブルを削除したいと考えています。しかし、これらの 10 を削除すると、FK 制約エラーが表示されます。制約を無効にして他のテーブルを削除せずにこれらのテーブルを削除する方法はありますか?
参照されたテーブルからのすべてのデータも切り捨てましたが、それでも FK 制約エラーが表示されます。
私の目的は、これらのテーブルの FK である他のテーブルを削除せずに、テーブルを削除することです。
この 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 ....
。