En SQL Server, tengo una nueva columna en una tabla:
ALTER TABLE t_tableName
ADD newColumn NOT NULL
Esto falla porque especifico NOT NULL sin especificar una restricción predeterminada. La tabla no debe tener una restricción predeterminada.
Para evitar esto, podría crear la tabla con la restricción predeterminada y luego eliminarla.
Sin embargo, no parece haber ninguna forma de especificar que la restricción predeterminada deba nombrarse como parte de esta declaración, por lo que mi única forma de deshacerme de ella es tener un procedimiento almacenado que lo busque en sys.default_constraints mesa.
Esto es un poco desordenado / detallado para una operación que probablemente sucederá mucho. ¿Alguien tiene mejores soluciones para esto?
NOT NULL
adyacente al tipo de datos? Puede ser sintácticamente válido ponerlo después de la restricción, pero parece confuso ponerlo allí.fuente
Me gustaría agregar algunos detalles, ya que las respuestas existentes son bastante delgadas :
La pista más importante es: ¡Nunca debe crear una restricción sin un nombre explícito!
El mayor problema con restricciones sin nombre : cuando ejecuta esto en varias máquinas de clientes, obtendrá nombres diferentes / aleatorios en cada una.
Cualquier script de actualización futura será un verdadero dolor de cabeza ...
El consejo general es:
DF_TableName_ColumnName
para una restricción predeterminadaCK_TableName_ColumnName
para una restricción de verificaciónUQ_TableName_ColumnName
por una restricción únicaPK_TableName
para una restricción de clave primariaLa sintaxis general es
Prueba esto aquí
Puede agregar más restricciones a cada columna y puede agregar restricciones adicionales al igual que agrega columnas después de una coma:
- inserte algunos datos
fuente
Intenta como debajo del script
fuente