Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

modifier la table puis mettre à jour en une seule instruction

Vous ne pouvez pas faire cela exactement dans une seule instruction (ou lot) et il semble que l'outil que vous utilisez ne supporte pas GO comme délimiteur de lot.

Vous pouvez utiliser EXEC pour l'exécuter dans un lot enfant cependant.

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

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

NB :Tous les guillemets simples de la requête doivent être doublés comme ci-dessus pour les échapper à l'intérieur d'un littéral de chaîne.

Vous pouvez également obtenir des résultats similaires dans une seule instruction à l'aide de certaines contraintes par défaut.

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;

Mais ce n'est pas exactement la même chose que la requête d'origine car les contraintes par défaut seront laissées et devront peut-être être supprimées.