Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

altera la tabella quindi aggiorna in una singola istruzione

Non puoi farlo esattamente in una singola istruzione (o batch) e sembra che lo strumento che stai utilizzando non supporti GO come delimitatore batch.

Puoi usare EXEC per eseguirlo in un batch figlio però.

ALTER TABLE A
  ADD c1 INT, c2 VARCHAR(10);

EXEC('
UPDATE A
SET    c1 = 23,
       c2 = ''ZZXX'';
    ');

NB:tutte le virgolette singole nella query devono essere raddoppiate come sopra per evitarle all'interno di una stringa letterale.

O in alternativa potresti ottenere risultati simili in una singola istruzione con l'ausilio di alcuni vincoli predefiniti.

ALTER TABLE A
  ADD c1 INT NULL CONSTRAINT DF_A_c1 DEFAULT 23 WITH VALUES, 
     c2 VARCHAR(10) CONSTRAINT DF_A_c2 NULL DEFAULT 'ZZXX' WITH VALUES;

Ma questo non è esattamente lo stesso della query originale poiché i vincoli predefiniti verranno lasciati indietro e potrebbe essere necessario eliminarli.