Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

altere a tabela e atualize em uma única instrução


Você não pode fazer isso exatamente em uma única instrução (ou lote) e parece que a ferramenta que você está usando não suporta GO como delimitador de lote.

Você pode usar EXEC para executá-lo em um lote filho.
ALTER TABLE A
  ADD c1 INT, c2 VARCHAR(10);

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

NB:Todas as aspas simples na consulta precisam ser dobradas como acima para escapar delas dentro de uma string literal.

Ou, alternativamente, você pode obter resultados semelhantes em uma única instrução com a ajuda de algumas restrições padrão.
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;

Mas isso não é exatamente o mesmo que a consulta original, pois as restrições padrão serão deixadas para trás e podem precisar ser descartadas.