web-dev-qa-db-fra.com

Comment déposer une clé étrangère dans SQL Server?

J'ai créé une clé étrangère (dans SQL Server) en:

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

Je lance alors cette requête:

alter table company drop column CountryID;

et j'obtiens cette erreur:

Msg 5074, niveau 16, état 4, ligne 2
L'objet 'Company_CountryID_FK' dépend de la colonne 'CountryID'.
Msg 4922, niveau 16, état 9, ligne 2
ALTER TABLE DROP COLUMN CountryID a échoué car un ou plusieurs objets accèdent à cette colonne

J'ai essayé cela, mais cela ne semble pas fonctionner:

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

Que dois-je faire pour supprimer la colonne CountryID?

Merci.

188
mmattax

Essayer

alter table company drop constraint Company_CountryID_FK


alter table company drop column CountryID
291
Mike

Cela fonctionnera:

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

Je pense que cela vous sera utile ...

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)

Il supprimera la contrainte de clé étrangère basée sur une table et une colonne spécifiques.

20
Samir Savasani

Vérifiez d'abord l'existence de la contrainte, puis supprimez-la.

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

Je ne connais pas MSSQL mais ne serait-ce pas:

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

Vous pouvez également cliquer avec le bouton droit de la souris sur la table, choisir Modifier, puis accéder à l'attribut, cliquer dessus avec le bouton droit de la souris et choisir Supprimer la clé primaire.

1

Essayez-vous de supprimer la contrainte FK ou la colonne elle-même?

Pour supprimer la contrainte:

alter table company drop constraint Company_CountryID_FK

Vous ne pourrez pas supprimer la colonne tant que vous n’aurez pas supprimé la contrainte.

1
Philip Wade