2012-09-18 19 views
6

¿Cómo puedo lograr esto en SQL Transact.mesa Alter continuación, actualice

Quiero añadir nueva columna a la tabla existente y luego actualizarlo con algunos valores. ¿Es posible hacerlo en un script sql o debería usar scripts separados?

Aquí es un código de muestras

ALTER TABLE my_table ADD my_new_column bit NULL; 

UPDATE my_table SET my_new_column = 0; 

sé que estoy haciendo escribiendo mientras que la columna todavía no existe así que por eso estas dos líneas no están funcionando. Pero, ¿cómo lograr esto en un solo script, es decir, utilizar algún retraso o cómo estar seguro de que se creó la columna y luego escribir datos en él?

que utilizar si existe con SELECT de la tabla pero no funciona.

gracias

Respuesta

14

Puede agregar la nueva columna y poblarlo, al mismo tiempo mediante la adición de un defecto y el uso de la cláusula WITH VALUES. A continuación, puede soltar el valor predeterminado al final si ya no es necesario. Este enfoque se puede usar para columnas múltiples como a continuación.

ALTER TABLE [myTable] 
ADD [my_new_column] [bit] NULL CONSTRAINT DF_TMP DEFAULT 0 , 
    [my_new_column2] [bit] NULL CONSTRAINT DF_TMP2 DEFAULT 1 WITH VALUES; 

ALTER TABLE [myTable] DROP DF_TMP, DF_TMP2 
+0

¿Qué ocurre si quiero actualizar varios campos con valores diferentes de 0, como 1? Intenté esta consulta, funciona bien, pero igual quiero usar la actualización después. – Vlad

+2

Puede agregar varias columnas y restricciones predeterminadas de la misma manera. Aparte de que a menudo es mejor hacer DDL en un lote diferente de LMD para evitar problemas de análisis (ya sea mediante la adición de 'GO' entre los estados o por el uso de' EXEC' dependiendo del contexto que tiene que hacer esto) –

+0

Wow gracias por el Consejo. Sí DDL debe separarse de DML, siempre. En este caso, necesitaba un script simple para terminar una tarea simple. De todas formas he utilizado esta respuesta aquí con instrucción GO y funcionó como esperaba http://stackoverflow.com/questions/1293638/sql-alter-table-then-modify-values – Vlad

Cuestiones relacionadas