2010-02-12 28 views
24

El mensaje de error que estoy obteniendo al intentar quitar una columna:¿Cómo elimino una columna con dependencias de objeto en SQL Server 2008?

El objeto 'defEmptyString' depende de la columna 'fkKeywordRolleKontakt'.

Msg 5074, nivel 16, estado 1, línea 43

ALTER TABLE DROP COLUMN fkKeywordRolleKontakt fracasaron debido a uno o más objetos de acceso a esta columna.

que ya han tratado de encontrar las restricciones predeterminadas, como se describe aquí: SQL Server 2005 drop column with constraints

Desafortunadamente sin ningún éxito :(La línea devuelta es:

fkKeywordRolleKontakt 2 814625945 0 defEmptyString 

Y no puede eliminar cualquiera de fkKeywordRolleKontakt y defEmptyString.

¿Cuál es la forma correcta de deshacerse de esta dependencia?

EDITAR: Quizás esto también es importante. La columna fkKeywordRolleKontakt es del tipo udKeyword (nvarchar (50)) con el valor predeterminado dbo.defEmptyString.


Edición 2: Resuelto

que podía resolver el problema ahora. Lo siento, yo no copio 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.

que podía generar una secuencia de comandos para quitar la columna haciendo clic derecho en la entrada de la columna (dbo.tlkpRolleKontakt> Columnas> fkKeywordRolleKontakt) (en el Administrador del servidor MSSQL), seleccionando Modificar y eliminar la columna. A continuación, el Diseñador de tablas> Generar el Cambio script generado 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 todo :)

+0

Gracias, debe agregar su Editar como respuesta y aceptarlo. – Sprockincat

+0

@Sprockincat Listo. –

Respuesta

3

que podía resolver el problema ahora. Lo siento, yo no copio 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'.
Msg 4922, nivel 16, estado 9, línea 1 ALTER TABLE DROP COLUMN fkKeywordRolleKontakt falló porque uno o más objetos acceden a esta columna.

que podía generar una secuencia de comandos para quitar la columna haciendo clic derecho en la entrada de la columna (dbo.tlkpRolleKontakt> Columnas> fkKeywordRolleKontakt) (en MSSQL Administrador de servidores), seleccione Modificar y eliminar la columna. A continuación, Diseñador de tablas> Generar secuencia de comandos de cambio 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 
+1

gracias, no sabía que pudiéramos desvincular un predeterminado (parece obvio ahora) – Disturb

36

¿Usted intentó en primer lugar:

ALTER TABLE <tablename> DROP CONSTRAINT defEmptyString; 

?

+2

Sí, lo hice. Luego recibí un mensaje que defEmptyString no es una restricción en esta tabla. –

+1

Entonces, ¿qué ocurre con esta consulta: SELECT OBJECT_NAME (parent_object_id) FROM sys.default_constraints WHERE name = 'defEmptyString'; -? ¿Obtienes un resultado, si es así, es esta tabla? Si no obtiene un resultado, qué ocurre con: SELECCIONE type_desc FROM sys.objects WHERE name = 'defEmptyString'; -? –

+0

Ningún resultado para el primero y para la segunda fila: type_desc DEFAULT_CONSTRAINT –

2

uso de este script para cancelar la comprobación de restricción:

ALTER TABLE @tablename NOCHECK CONSTRAINT @constraintname 
+0

No parece haber ninguna restricción: Msg 11415, nivel 16, estado 1, línea 1 El objeto 'defEmptyString' no se puede deshabilitar ni habilitar. Esta acción se aplica solo a claves externas y restricciones de verificación. Msg 4916, nivel 16, estado 0, línea 1 No se pudo habilitar o deshabilitar la restricción. Ver errores previos. –

-1

me encontré con una solución más simple.

  1. ELIMINAR los datos de esa columna.
  2. Una vez que la columna no tiene ningún valor en su interior do -

ALTER TABLE <table_name> DROP COLUMN <column_name>

De esta forma la columna se deja caer fácilmente.

P.S: esto es un dolor de cabeza si tiene cantidades extremas de datos en la columna.

+0

ahh, y ¿qué pasa con los datos que se borraron ... –

+1

Las claves foráneas que no admiten nulos no permiten este –

7

quitar la restricción que depende de esa columna con

ALTER TABLE TableName DROP CONSTRAINT dependent_constraint 

a continuación, colocar la columna:

ALTER TABLE TABLE_NAME DROP COLUMN COLUMN_NAME 

dependent_constraint: esta restricción se muestra en el error cuando tratamos para eliminar la columna dependiente

Ejemplo: tratar de soltar algo de columna IsDeleted2

Error

El objeto 'DF__Employees__IsDel__15502E78' es dependiente de la columna 'IsDeleted2'.

ALTER TABLE DROP COLUMN IsDeleted2 ha fallado porque uno o más objetos acceden a esta columna.

error indica claramente que necesitamos para eliminar DF__Employees__IsDel__15502E78 restricción

ALTER TABLE Employess 
DROP CONSTRAINT DF__Employees__IsDel__15502E78; 

gota Columna:ALTER TABLE Employess DROP COLUMN IsDelted2

Cuestiones relacionadas