¿Cómo soltar una columna que tiene la restricción predeterminada en SQL Server 2008?
Mi consulta es
alter table tbloffers
drop column checkin
Me estoy poniendo debajo del error
El registro ALTER TABLE DROP COLUMN falló porque uno o más objetos acceden a esta columna.
¿Alguien puede corregir mi consulta para colocar una columna con restricción?
sql-server
sql-server-2008
Robin Michael Poothurai
fuente
fuente
Respuestas:
Primero debe descartar la problemática
DEFAULT constraint
, luego puede descartar la columnaPero el error puede aparecer por otros motivos, por ejemplo, la función o vista definida por el usuario con la
SCHEMABINDING
opción establecida para ellos.UPD: secuencia de comandos de eliminación de restricciones completamente automatizada:
fuente
Aquí hay otra forma de eliminar una restricción predeterminada con un nombre desconocido sin tener que ejecutar primero una consulta separada para obtener el nombre de la restricción:
fuente
También puede soltar la columna y sus restricciones en una sola declaración en lugar de hacerlo individualmente.
A continuación se muestra un poco de SQL dinámico que buscará los nombres de las restricciones de verificación dependientes y las restricciones predeterminadas y las soltará junto con la columna
(pero no otras posibles dependencias de columna como claves foráneas, restricciones de clave única y primaria, columnas calculadas, índices)
fuente
DROP CONSTRAINT
ver la gramática. Si no nombra las restricciones explícitamente, tendrá que buscar el nombre que SQL Server generó, por ejemplo, según la respuesta de Marc. Pero habiendo descubierto eso, aún puede soltar la restricción y la columna al mismo tiempo.Encuentre la restricción predeterminada con esta consulta aquí:
Esto le da el nombre de la restricción predeterminada, así como el nombre de la tabla y la columna.
Cuando tenga esa información, primero debe eliminar la restricción predeterminada:
y luego puedes soltar la columna
fuente
ALTER TABLE table DROP CONSTRAINT DF_XY DROP COLUMN XY
Desafortunadamente, la sintaxis de esta declaración no es correctaDROP
comandos para que esto funcioneLo siguiente funcionó para mí contra un back-end de SQL Azure (usando SQL Server Management Studio), por lo que YMMV, pero, si funciona para usted, es muuuucho más simple que las otras soluciones.
fuente
Tengo lo mismo:
ALTER TABLE DROP COLUMN falló porque uno o más objetos acceden a esta columna mensaje de .
Mi columna tenía un índice que primero debía eliminarse. El uso de sys.indexes hizo el truco:
fuente
He actualizado el script un poco a mi versión del servidor SQL
fuente
No siempre es solo una restricción predeterminada que evita que se caiga una columna y, a veces, los índices también pueden impedir que se caiga la restricción. Entonces escribí un procedimiento que elimina cualquier índice o restricción en una columna y la columna en sí misma al final.
fuente