¿Cómo agregar una columna con un valor predeterminado a una tabla existente en SQL Server?
¿Cómo puedo agregar una columna con un valor predeterminado a una tabla existente en SQL Server 2000 / SQL Server 2005 ?
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_SomeCol
SQL 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 VALUES
necesaria 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 VALUES
o no.
Cómo funcionan las inserciones con una restricción predeterminada:
si inserta un registro SomeTable
y no especifica SomeCol
el valor, el valor predeterminado será 0
.
Si inserta un Registro y especifica SomeCol
el valor como NULL
(y su columna permite valores nulos),
entonces la restricción predeterminada no se utilizará y NULL
se 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.
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.
Al agregar una columna que acepta valores NULL , WITH VALUES
se 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
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
ALTER TABLE MYTABLE ADD MYNEWCOLUMN VARCHAR(200) DEFAULT 'SNUGGLES'
La versión más básica con sólo dos líneas.
ALTER TABLE MyTable
ADD MyNewColumn INT NOT NULL DEFAULT 0