1. ホーム
  2. sql-server

[解決済み] SQL DROP TABLE 外部キー制約

2022-04-22 09:51:20

質問

このようにデータベース内のすべてのテーブルを削除したい場合、外部キー制約は処理されるのでしょうか?そうでない場合、最初にどのようにそれを処理すればよいですか?

GO
IF OBJECT_ID('dbo.[Course]','U') IS NOT NULL
    DROP TABLE dbo.[Course]
GO
IF OBJECT_ID('dbo.[Student]','U') IS NOT NULL
    DROP TABLE dbo.[Student]

解決方法は?

いいえ、これは、実際にそれを参照する外部キーがある場合、あなたのテーブルをドロップしません。

テーブルを参照しているすべての外部キー関係を取得するには、次の SQL を使用します (SQL Server 2005 以降を使用している場合)。

SELECT * 
FROM sys.foreign_keys
WHERE referenced_object_id = object_id('Student')

そして、もしあれば、このステートメントで、それらのFKリレーションを実際に削除するSQLステートメントを作成することができます。

SELECT 
    'ALTER TABLE [' +  OBJECT_SCHEMA_NAME(parent_object_id) +
    '].[' + OBJECT_NAME(parent_object_id) + 
    '] DROP CONSTRAINT [' + name + ']'
FROM sys.foreign_keys
WHERE referenced_object_id = object_id('Student')