2012-09-18 11 views
6

Come posso ottenere questo in squl Transact.Modificare la tabella, quindi aggiornare

Desidero aggiungere una nuova colonna alla tabella esistente e quindi aggiornarla con alcuni valori. È possibile farlo in uno script sql o dovrei usare script separati?

Ecco un codice campioni

ALTER TABLE my_table ADD my_new_column bit NULL; 

UPDATE my_table SET my_new_column = 0; 

so che sto facendo a scrivere mentre la colonna ancora non esiste quindi ecco perché queste due linee non funzionano. Ma come farlo in uno script, io uso un po 'di ritardo o come essere sicuro che la colonna sia stata creata e quindi scrivere i dati su di essa?

Ho usato IF EXISTS con select dalla tabella ma non funziona.

grazie

risposta

14

È possibile aggiungere la nuova colonna e popolare allo stesso tempo con l'aggiunta di un default e utilizzando la clausola WITH VALUES. È quindi possibile rilasciare il valore predefinito alla fine, se non è più necessario. Questo approccio può essere utilizzato per più colonne come sotto.

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

E se volessi aggiornare più campi con valori diversi da 0, come 1? Ho provato questa query funziona bene, ma voglio comunque utilizzare l'aggiornamento in seguito. – Vlad

+2

È possibile aggiungere più colonne e vincoli predefiniti allo stesso modo. A parte questo, spesso è meglio fare DDL in un batch diverso da DML per evitare problemi di parsing (aggiungendo 'GO' tra le istruzioni o usando' EXEC' a seconda del contesto che devi fare) –

+0

Wow grazie per il Consiglio. Sì DDL dovrebbe essere separato da DML, sempre. In questo caso, avevo bisogno di uno script semplice per completare un compito semplice. Comunque ho usato questa risposta qui con la dichiarazione GO e ha funzionato come mi aspettavo http://stackoverflow.com/questions/1293638/sql-alter-table-then-modify-values – Vlad

Problemi correlati