2008-09-18 14 views
157

he creado una clave externa (en SQL Server) por:¿Cómo puedo soltar una clave externa en SQL Server?

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

entonces me funciono con esta pregunta:

alter table company drop column CountryID; 

y me sale este error:

Msg 5074, Level 16, State 4, Line 2
The object 'Company_CountryID_FK' is dependent on column 'CountryID'.
Msg 4922, Level 16, State 9, Line 2
ALTER TABLE DROP COLUMN CountryID failed because one or more objects access this column

tengo intentado esto, sin embargo, parece que no funciona:

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

¿Qué debo hacer para soltar la columna CountryID?

Gracias.

+2

¿Qué error obtienes al intentar soltar la clave externa? – ddc0660

+0

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, entonces use el código proporcionado en las otras respuestas. De lo contrario, no abandone 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 busness y es mejor estar seguros de que ya no son necesarias antes de descartarlas. – HLGEM

+0

http://www.w3schools.com/sql/sql_foreignkey.asp – xameeramir

Respuesta

243

Trate

alter table company drop constraint Company_CountryID_FK 


alter table company drop column CountryID 
4

No sé MSSQL, pero ¿no sería:

alter table company drop **constraint** Company_CountryID_FK; 
10
alter table company drop constraint Company_CountryID_FK 
44

esto funcionará:

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

también puede hacer clic derecho sobre la mesa, elija modificar, luego vaya al atributo, haga clic derecho sobre él, y choo se soltar clave principal.

1

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

quitar la restricción:

alter table company drop constraint Company_CountryID_FK 

usted no será capaz de bajar la columna hasta que se le cae la restricción.

15

Creo que esta será útil para usted ...

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) 

Se eliminará restricción de clave externa basada en la tabla y columna específica.

+1

Gracias Samir. Gran generalización. – kuklei

13

Primero compruebe la existencia de la restricción y 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 
Cuestiones relacionadas