usa - ¿Cómo se suelta una columna con dependencias de objetos en SQL Server 2008?
ver dependencias de una columna sql server (5)
¿Lo intentaste primero?
ALTER TABLE <tablename> DROP CONSTRAINT defEmptyString;
?
El mensaje de error que obtengo al intentar eliminar una columna:
El objeto ''defEmptyString'' depende de la columna ''fkKeywordRolleKontakt''.
Msg 5074, Nivel 16, Estado 1, Línea 43
ALTER TABLE DROP COLUMN fkKeywordRolleKontakt falló porque uno o más objetos accedieron a esta columna.
Ya he intentado encontrar las restricciones predeterminadas, como se describe aquí: Columna caída de SQL Server 2005 con restricciones
Desafortunadamente sin ningún éxito :( La línea devuelta es:
fkKeywordRolleKontakt 2 814625945 0 defEmptyString
Y no puedo eliminar fkKeywordRolleKontakt
y defEmptyString
.
¿Cuál es la forma correcta de deshacerse de esta dependencia?
EDITAR: Tal vez esto también es importante. La columna fkKeywordRolleKontakt es de tipo udKeyword (nvarchar (50)) con el dbo.defEmptyString
predeterminado.
Edición 2: resuelto
Podría resolver el problema ahora. Lo siento, no copié el mensaje de error completo, que era:
Msg 5074, Level 16, State 1, Line 1
The object ''defEmptyString'' is dependent on column ''fkKeywordRolleKontakt''.
Msg 5074, Level 16, State 1, Line 1
The object ''FK_tlkpRolleKontakt_tlkpKeyword'' is dependent on column ''fkKeywordRolleKontakt''.
Msg 4922, Level 16, State 9, Line 1
ALTER TABLE DROP COLUMN fkKeywordRolleKontakt failed because one or more objects access this column.
Podría generar un script para eliminar la columna haciendo clic con el botón derecho en la entrada de la columna (dbo.tlkpRolleKontakt> Columnas> fkKeywordRolleKontakt) (en MSSQL Server Manager), seleccionando Modificar y borrando la columna. Luego, Table Designer> Generar cambio de script generó los comandos necesarios:
ALTER TABLE dbo.tlkpRolleKontakt
DROP CONSTRAINT FK_tlkpRolleKontakt_tlkpKeyword
EXECUTE sp_unbindefault N''dbo.tlkpRolleKontakt.fkKeywordRolleKontakt''
ALTER TABLE dbo.tlkpRolleKontakt
DROP COLUMN fkKeywordRolleKontakt
Eso es :)
Me encontré con una solución más simple.
- BORRAR los datos de esa columna.
- Una vez que la columna no tiene valor dentro de ella,
ALTER TABLE <table_name> DROP COLUMN <column_name>
De esta manera la columna se deja caer fácilmente.
PD: esto es un dolor de cabeza si tiene cantidades extremas de datos en la columna.
Podría resolver el problema ahora. Lo siento, no copié el mensaje de error completo, que era:
Msg 5074, Nivel 16, Estado 1, Línea 1
El objeto ''defEmptyString'' depende de la columna ''fkKeywordRolleKontakt''.
Msg 5074, Nivel 16, Estado 1, Línea 1
El objeto ''FK_tlkpRolleKontakt_tlkpKeyword'' depende de la columna ''fkKeywordRolleKontakt''.
Mensaje 4922, nivel 16, estado 9, línea 1 ALTER TABLE DROP COLUMN fkKeywordRolleKontakt falló porque uno o más objetos accedieron a esta columna.
Podría generar un script para eliminar la columna haciendo clic con el botón derecho en la entrada de la columna (dbo.tlkpRolleKontakt> Columnas> fkKeywordRolleKontakt) (en MSSQL Server Manager), seleccionando Modificar y borrando la columna. Luego, Table Designer> Generar cambio de script generó los comandos necesarios:
ALTER TABLE dbo.tlkpRolleKontakt
DROP CONSTRAINT FK_tlkpRolleKontakt_tlkpKeyword
EXECUTE sp_unbindefault N''dbo.tlkpRolleKontakt.fkKeywordRolleKontakt''
ALTER TABLE dbo.tlkpRolleKontakt
DROP COLUMN fkKeywordRolleKontakt
Utilice este script para cancelar la comprobación de restricción:
ALTER TABLE @tablename NOCHECK CONSTRAINT @constraintname
suelte la restricción que depende de esa columna con
ALTER TABLE TableName DROP CONSTRAINT dependent_constraint
Luego suelte la columna:
ALTER TABLE TABLE_NAME DROP COLUMN COLUMN_NAME
dependencia_dependiente : esta restricción se muestra en el error cuando intentamos eliminar la columna dependiente.
Ejemplo: tratando de eliminar alguna columna IsDeleted2
Error
El objeto ''DF__Employees__IsDel__15502E78'' depende de la columna ''IsDeleted2''.
ALTER TABLE DROP COLUMN IsDeleted2 falló porque uno o más objetos acceden a esta columna.
El error indica claramente que debemos eliminar la restricción DF__Employees__IsDel__15502E78
ALTER TABLE Employess
DROP CONSTRAINT DF__Employees__IsDel__15502E78;
Columna ALTER TABLE Employess DROP COLUMN IsDelted2
: ALTER TABLE Employess DROP COLUMN IsDelted2