2010-09-22 13 views
96

En SQL Server, tengo una nueva columna en una tabla:¿Puedo crear una restricción predeterminada nombrada en una instrucción agregar columna en SQL Server?

ALTER TABLE t_tableName 
    ADD newColumn NOT NULL 

Esta falla porque puedo especificar 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 instrucción, por lo que la única manera de deshacerse de ella es tener un procedimiento almacenado que lo busque en la tabla sys.default_constraints.

Esto es un poco desordenado/detallado para una operación que es probable que suceda mucho. ¿Alguien tiene mejores soluciones para esto?

Respuesta

149

Esto debería funcionar:

ALTER TABLE t_tableName 
    ADD newColumn VARCHAR(50) 
    CONSTRAINT YourContraintName DEFAULT '' NOT NULL 
+0

Obras en el 2012 también. Detalles de Gory: http://msdn.microsoft.com/en-us/library/ms187742.aspx – adam77

1

Podría crear la columna sin el NOT NULL, ejecutar una actualización en la fecha existente, luego modificar la columna para tener el NOT NULL. Me preocupan las implicaciones de rendimiento de esto, por ejemplo, si estuviera en una tabla de filas multimillonarias, por lo que parece menos que ideal.

53
ALTER TABLE t_tableName 
    ADD newColumn int NOT NULL 
     CONSTRAINT DF_defaultvalue DEFAULT (1) 
+12

Prefiero esto a la respuesta aceptada, ya que puedo eliminar la restricción predeterminada sin preocuparme por perder la restricción NOT NULL. – EleventhDoctor

+4

@EleventhDoctor Eso no tiene sentido. NOT NULL no es parte de la restricción y la instrucción drop solo hace referencia al nombre de restricción –

+4

@RogerWillcocks Tiene razón, pero es más claro al leerlo que NOT NULL está separado de la restricción. – deluxxxe

Cuestiones relacionadas