web-dev-qa-db-ja.com

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

次の方法で(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列を削除するにはどうすればよいですか?

ありがとう。

185
mmattax

試して

alter table company drop constraint Company_CountryID_FK


alter table company drop column CountryID
286
Mike

これは動作します:

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

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

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)

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

20
Samir Savasani

最初に制約の存在を確認してから、ドロップします。

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
18
Naeem Iqbal
alter table company drop constraint Company_CountryID_FK
10
boes

私はMSSQLを知りませんが、知らないでしょう:

alter table company drop **constraint** Company_CountryID_FK;
4
Dave Costa

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

1

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

制約を削除するには:

alter table company drop constraint Company_CountryID_FK

制約をドロップするまで、列をドロップすることはできません。

1
Philip Wade