¿Cómo agregar una columna con un valor predeterminado a una tabla existente en SQL Server?

Resuelto Mathias asked hace 16 años • 45 respuestas

¿Cómo puedo agregar una columna con un valor predeterminado a una tabla existente en SQL Server 2000 / SQL Server 2005 ?

Mathias avatar Sep 18 '08 19:09 Mathias
Aceptado

Sintaxis:

ALTER TABLE {TABLENAME} 
ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL} 
CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}
WITH VALUES

Ejemplo:

ALTER TABLE SomeTable
        ADD SomeCol Bit NULL --Or NOT NULL.
 CONSTRAINT D_SomeTable_SomeCol --When Omitted a Default-Constraint Name is autogenerated.
    DEFAULT (0)--Optional Default-Constraint.
WITH VALUES --Add if Column is Nullable and you want the Default Value for Existing Records.

Notas:

Nombre de restricción opcional:
si lo omite, CONSTRAINT D_SomeTable_SomeColSQL Server generará automáticamente
    una restricción predeterminada con un nombre divertido como:DF__SomeTa__SomeC__4FB7FEF6

Declaración con valores opcional:
solo es WITH VALUESnecesaria cuando su columna admite valores NULL
    y desea utilizar el valor predeterminado para los registros existentes.
Si su columna es NOT NULL, utilizará automáticamente el valor predeterminado
    para todos los registros existentes, ya sea que lo especifique WITH VALUESo no.

Cómo funcionan las inserciones con una restricción predeterminada:
si inserta un registro SomeTabley no especifica SomeColel valor, el valor predeterminado será 0.
Si inserta un Registro y especifica SomeColel valor como NULL(y su columna permite valores nulos),
    entonces la restricción predeterminada no se utilizará y NULLse insertará como valor.

Las notas se basaron en los excelentes comentarios de todos a continuación.
Un agradecimiento especial a:
    @Yatrix, @WalterStabosz, @YahooSerious y @StackMan por sus comentarios.

James Boother avatar Sep 18 '2008 12:09 James Boother
ALTER TABLE Protocols
ADD ProtocolTypeID int NOT NULL DEFAULT(1)
GO

La inclusión de DEFAULT llena la columna en las filas existentes con el valor predeterminado, por lo que no se viola la restricción NOT NULL.

dbugger avatar Sep 18 '2008 12:09 dbugger

Al agregar una columna que acepta valores NULL , WITH VALUESse asegurará de que el valor PREDETERMINADO específico se aplique a las filas existentes:

ALTER TABLE table_name
ADD column_name BIT     -- Demonstration with NULL-able column added
CONSTRAINT Constraint_name DEFAULT 0 WITH VALUES
phunk_munkie avatar Apr 12 '2011 17:04 phunk_munkie
ALTER TABLE <table name> 
ADD <new column name> <data type> NOT NULL
GO
ALTER TABLE <table name> 
ADD CONSTRAINT <constraint name> DEFAULT <default value> FOR <new column name>
GO
ddc0660 avatar Sep 18 '2008 12:09 ddc0660
ALTER TABLE MYTABLE ADD MYNEWCOLUMN VARCHAR(200) DEFAULT 'SNUGGLES'
Evan V avatar Aug 05 '2012 03:08 Evan V

La versión más básica con sólo dos líneas.

ALTER TABLE MyTable
ADD MyNewColumn INT NOT NULL DEFAULT 0
adeel41 avatar May 25 '2012 14:05 adeel41