SQL Serverで外部キーを削除するにはどうすればよいですか?


201

(SQL Serverで)外部キーを作成しました。

alter table company add CountryID varchar(3);
alter table company add constraint Company_CountryID_FK foreign key(CountryID) 
references Country;

次に、このクエリを実行します。

alter table company drop column CountryID;

そして私はこのエラーを受け取ります:

メッセージ5074、レベル16、状態4、行2
オブジェクト 'Company_CountryID_FK'は列 'CountryID'に依存しています。
メッセージ4922、レベル16、状態9、行2の
1つ以上のオブジェクトがこの列にアクセスするため、ALTER TABLE DROP COLUMN CountryIDが失敗しました

私はこれを試しましたが、うまくいかないようです:

alter table company drop foreign key Company_CountryID_FK; 
alter table company drop column CountryID;

CountryIDカラムを落とすには何が必要ですか?

ありがとう。


2
外部キーを削除しようとすると、どのエラーが発生しますか?
ddc0660 2008

2
そもそもなぜそこにあるのかを知らずに外部キー制約を削除するのは危険であることに注意してください。これを作成して誤って作成した場合は、他の回答で提供されているコードを使用してください。そうでない場合は、それによって他の何かを壊さないことが確実になるまで、制約を削除しないでください。制約は、ビジネスルールを適用するために作成されます。制約を削除する前に、不要であることを確認することをお勧めします。
HLGEM 2008


FKを削除するための構文には、「外部キー」という単語は必要ありません。これは、SQL Serverではなく、MySQLの構文です。「制約」という単語に置き換えることができます。
John Gilmer

回答:


314

試す

alter table company drop constraint Company_CountryID_FK


alter table company drop column CountryID

49

これは動作します:

ALTER TABLE [dbo].[company] DROP CONSTRAINT [Company_CountryID_FK]

23

これはあなたに役立つと思います...

DECLARE @ConstraintName nvarchar(200)
SELECT 
    @ConstraintName = KCU.CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS AS RC 
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS KCU
    ON KCU.CONSTRAINT_CATALOG = RC.CONSTRAINT_CATALOG  
    AND KCU.CONSTRAINT_SCHEMA = RC.CONSTRAINT_SCHEMA 
    AND KCU.CONSTRAINT_NAME = RC.CONSTRAINT_NAME
WHERE
    KCU.TABLE_NAME = 'TABLE_NAME' AND
    KCU.COLUMN_NAME = 'TABLE_COLUMN_NAME'
IF @ConstraintName IS NOT NULL EXEC('alter table TABLE_NAME drop  CONSTRAINT ' + @ConstraintName)

特定のテーブルと列に基づいて外部キー制約を削除します。


2
ありがとう、サミール。素晴らしい一般化。
kuklei 2017年

19

最初に制約の存在を確認してから、それを削除します。

if exists (select 1 from sys.objects where name = 'Company_CountryID_FK' and type='F')
begin
alter table company drop constraint  Company_CountryID_FK
end


4

私はMSSQLを知りませんが、そうではありません:

alter table company drop **constraint** Company_CountryID_FK;

1

テーブルを右クリックして[変更]を選択し、属性に移動して右クリックし、[主キーの削除]を選択することもできます。


1

FK制約または列自体を削除しようとしていますか?

制約を削除するには:

alter table company drop constraint Company_CountryID_FK

制約を削除するまで、列を削除することはできません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.