¿Cómo se suelta una clave foránea en SQL Server?


201

He creado una clave foránea (en SQL Server) por:

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

Luego ejecuto esta consulta:

alter table company drop column CountryID;

y me sale este error:

Msg 5074, Nivel 16, Estado 4, Línea 2
El objeto 'Company_CountryID_FK' depende de la columna 'CountryID'.
Mensaje 4922, Nivel 16, Estado 9, Línea 2
ALTER TABLE DROP COLUMN CountryID falló porque uno o más objetos acceden a esta columna

He intentado esto, pero no parece funcionar:

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

¿Qué debo hacer para soltar la CountryIDcolumna?

Gracias.


2
¿Qué error aparece al intentar soltar la clave externa?
ddc0660

2
Solo tenga en cuenta que es peligroso eliminar una restricción de clave externa sin saber por qué está allí en primer lugar. Si acaba de crear esto y lo hizo por error, utilice el código proporcionado en las otras respuestas. De lo contrario, no elimine la restricción hasta que esté seguro de que no romperá otra cosa al hacerlo. Las restricciones se crean para hacer cumplir las reglas de negocio y es mejor asegurarse de que ya no sean necesarias antes de descartarlas.
HLGEM


Su sintaxis para soltar el FK no necesita las palabras "clave foránea". Esta es la sintaxis para MySQL, no para SQL Server. Puede reemplazarlo con la palabra "restricción".
John Gilmer

Respuestas:


314

Tratar

alter table company drop constraint Company_CountryID_FK


alter table company drop column CountryID

49

Esto funcionará:

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

23

Creo que esto te ayudará ...

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)

Eliminará la restricción de clave externa en función de una tabla y columna específicas.


2
Gracias Samir Gran generalización
kuklei

19

Primero verifique la existencia de la restricción y luego suéltela.

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

11
alter table company drop constraint Company_CountryID_FK

4

No sé MSSQL pero no sería:

alter table company drop **constraint** Company_CountryID_FK;

1

También puede hacer clic derecho en la tabla, elegir modificar, luego ir al atributo, hacer clic derecho sobre él y elegir soltar la clave primaria.


1

¿Estás tratando de eliminar la restricción FK o la columna misma?

Para eliminar la restricción:

alter table company drop constraint Company_CountryID_FK

No podrá soltar la columna hasta que suelte la restricción.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.