¿Cómo puedo agregar una columna con un valor predeterminado a una tabla existente en SQL Server 2000 / SQL Server 2005 ?
2767
¿Cómo puedo agregar una columna con un valor predeterminado a una tabla existente en SQL Server 2000 / SQL Server 2005 ?
Respuestas:
Sintaxis:
Ejemplo:
Notas:
Nombre de restricción opcional:
si se excluye
CONSTRAINT D_SomeTable_SomeCol
, SQL Server generará automáticamenteuna Contraseña predeterminada con un nombre divertido como:
DF__SomeTa__SomeC__4FB7FEF6
Opcional con valores Declaración:
El
WITH VALUES
sólo es necesario cuando su columna es anulabley desea que el Valor predeterminado utilizado para los registros existentes.
Si su columna es
NOT NULL
, entonces usará automáticamente el valor predeterminadopara todos los registros existentes, ya sea que especifique
WITH VALUES
o no.Cómo funcionan las inserciones con una restricción predeterminada:
si inserta un registro en
SomeTable
y no especificaSomeCol
el valor, entonces la opción predeterminada será0
.Si inserta un valor de Registro y especificación
SomeCol
comoNULL
(y su columna permite valores nulos),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.
fuente
NOT NULL
. Intente esto:create table blah(a int not null primary key clustered); insert blah values (1), (2); alter table blah add b int null constraint df_blah_b default (0); select * from blah;
verá 2 valores NULL para la columnab
.WITH VALUES
para actualizar las filas anulables existentes. Consulte MSDN : "Si la columna agregada permite valores nulos yWITH VALUES
se especifica, el valor predeterminado se almacena en la nueva columna y se agrega a las filas existentes".La inclusión de DEFAULT llena la columna en las filas existentes con el valor predeterminado, por lo que no se infringe la restricción NOT NULL.
fuente
Al agregar una columna anulable ,
WITH VALUES
se asegurará de que el valor DEFAULT específico se aplique a las filas existentes:fuente
DEFAULT
restricción siempre tendrá un valor, es decir, no será NULL, aunqueNOT NULL
no se especifique.BIT
tipo de datos, estaba hablando de estaBIT
columna en particular . Mire la respuesta, la columna se declara comoNOT NULL
.fuente
fuente
Tenga cuidado cuando la columna que está agregando tiene una
NOT NULL
restricción, pero no tiene unaDEFAULT
restricción (valor). LaALTER TABLE
declaración fallará en ese caso si la tabla tiene alguna fila. La solución es eliminar laNOT NULL
restricción de la nueva columna o proporcionarle unaDEFAULT
restricción.fuente
La versión más básica con solo dos líneas.
fuente
Utilizar:
fuente
Si desea agregar varias columnas, puede hacerlo de esta manera, por ejemplo:
fuente
Utilizar:
Referencia: ALTER TABLE (Transact-SQL) (MSDN)
fuente
Para agregar una columna a una tabla de base de datos existente con un valor predeterminado, podemos usar:
Aquí hay otra forma de agregar una columna a una tabla de base de datos existente con un valor predeterminado.
A continuación se incluye una secuencia de comandos SQL mucho más exhaustiva para agregar una columna con un valor predeterminado, incluida la verificación de si la columna existe antes de agregarla, también se registra la restricción y se descarta si hay una. Este script también nombra la restricción para que podamos tener una buena convención de nomenclatura (me gusta DF_) y si no, SQL nos dará una restricción con un nombre que tiene un número generado aleatoriamente; así que es bueno poder nombrar la restricción también.
Estas son dos formas de agregar una columna a una tabla de base de datos existente con un valor predeterminado.
fuente
Puede hacer lo mismo con T-SQL de la siguiente manera.
Además, puede usar SQL Server Management Studio también haciendo clic derecho en la tabla en el menú Diseño, estableciendo el valor predeterminado en tabla.
Y además, si desea agregar la misma columna (si no existe) a todas las tablas de la base de datos, use:
fuente
En SQL Server 2008-R2, voy al modo de diseño, en una base de datos de prueba, y agrego mis dos columnas con el diseñador e hice la configuración con la GUI, y luego el infame Right-Clickda la opción " Generar secuencia de comandos de cambio "!
Bang up abre una pequeña ventana con, lo adivinaste, el script de cambio garantizado al trabajo correctamente formateado. Presiona el botón fácil.
fuente
Alternativamente, puede agregar un valor predeterminado sin tener que nombrar explícitamente la restricción:
Si tiene un problema con las restricciones predeterminadas existentes al crear esta restricción, se pueden eliminar de la siguiente manera:
fuente
Esto también se puede hacer en la GUI de SSMS. Muestro una fecha predeterminada a continuación, pero el valor predeterminado puede ser el que sea, por supuesto.
(getdate())
oabc
o0
o cualquier valor que desee en Valor predeterminado o vinculante campo como se muestra a continuación:fuente
El artículo ALTER TABLE (Transact-SQL) de MSDN tiene toda la sintaxis de la tabla alter.
fuente
Ejemplo:
fuente
Ejemplo:
fuente
Primero cree una tabla con el nombre de estudiante:
Agregue una columna:
Se crea la tabla y se agrega una columna a una tabla existente con un valor predeterminado.
fuente
Esto tiene muchas respuestas, pero siento la necesidad de agregar este método extendido. Esto parece mucho más largo, pero es extremadamente útil si agrega un campo NOT NULL a una tabla con millones de filas en una base de datos activa.
Lo que esto hará es agregar la columna como un campo anulable y con el valor predeterminado, actualizar todos los campos al valor predeterminado (o puede asignar valores más significativos), y finalmente cambiará la columna para que NO sea NULL.
La razón de esto es si actualiza una tabla a gran escala y agrega un nuevo campo no nulo que tiene que escribir en cada fila y de este modo bloqueará toda la tabla a medida que agrega la columna y luego escribe todos los valores.
Este método agregará la columna anulable que funciona mucho más rápido por sí misma, luego llena los datos antes de establecer el estado no nulo.
Descubrí que hacer todo en una sola declaración bloqueará una de nuestras tablas más activas durante 4-8 minutos y, a menudo, he interrumpido el proceso. Este método generalmente toma cada parte de unos pocos segundos y provoca un bloqueo mínimo.
Además, si tiene una tabla en el área de miles de millones de filas, puede valer la actualización por lotes de la siguiente manera:
fuente
Prueba esto
fuente
SQL Server + Modificar tabla + Agregar columna + Valor predeterminado uniqueidentifier
fuente
fuente
NOT EXISTS
cheque antes de intentar alterar la tabla. Muy buena solucion. Algunos comentarios adicionales sobre cómo funciona esto lo harían aún más útil.fuente
Agregue una nueva columna a una tabla:
Por ejemplo,
Si el usuario desea que se incremente automáticamente, entonces:
fuente
Esto es para SQL Server:
Ejemplo:
Si desea agregar restricciones, entonces:
fuente
Esto se puede hacer con el siguiente código.
fuente
Pruebe con la siguiente consulta:
Esto agregará una nueva columna a la tabla.
fuente
Desde esta consulta, puede agregar una columna de entero de tipo de datos con el valor predeterminado 0.
fuente
Bueno, ahora tengo alguna modificación a mi respuesta anterior. He notado que ninguna de las respuestas mencionadas
IF NOT EXISTS
. Así que voy a proporcionar una nueva solución, ya que me he enfrentado a algunos problemas para alterar la tabla.Aquí
TaskSheet
está el nombre de la tabla en particular yIsBilledToClient
es la nueva columna que va a insertar y1
el valor predeterminado. Eso significa en la nueva columna cuál será el valor de las filas existentes, por lo tanto, se establecerá automáticamente allí. Sin embargo, puede cambiar lo que desee con respecto al tipo de columna como lo he usadoBIT
, por lo que puse el valor predeterminado 1.Sugiero el sistema anterior, porque me he enfrentado a un problema. Entonces, ¿cuál es el problema? El problema es que si la
IsBilledToClient
columna existe en la tabla de la tabla, entonces si ejecuta solo la parte del código que figura a continuación, verá un error en el generador de consultas del servidor SQL. Pero si no existe, por primera vez no habrá ningún error al ejecutar.fuente