1. ホーム
  2. sql

[解決済み] [Solved] sql serverに存在する場合のみ外部キー制約を削除するにはどうすればよいですか?

2022-04-02 15:01:59

質問

以下のコードを使用して、テーブルが存在する場合は削除することができますが、制約で同じことを行う方法がわかりません。

IF EXISTS(SELECT 1 FROM sys.objects WHERE OBJECT_ID = OBJECT_ID(N'TableName') AND type = (N'U')) DROP TABLE TableName
go 

また、このコードで制約を追加しています。

ALTER TABLE [dbo].[TableName] 
  WITH CHECK ADD CONSTRAINT [FK_TableName_TableName2] FOREIGN KEY([FK_Name])
    REFERENCES [dbo].[TableName2] ([ID])
go

解決方法は?

よりシンプルな解決策は Eric Isaacsの の回答です。しかし、これはあらゆるテーブル上の制約を見つけることができます。特定のテーブルの外部キー制約をターゲットにしたい場合は、これを使用してください。

IF EXISTS (SELECT * 
  FROM sys.foreign_keys 
   WHERE object_id = OBJECT_ID(N'FK_TableName_TableName2')
   AND parent_object_id = OBJECT_ID(N'dbo.TableName')
)
  ALTER TABLE [dbo].[TableName] DROP CONSTRAINT [FK_TableName_TableName2]