Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

ändern Sie die Tabelle und aktualisieren Sie sie dann in einer einzigen Anweisung

Das kann man genau nicht machen in einer einzelnen Anweisung (oder einem Stapel) und es scheint, dass das von Ihnen verwendete Tool GO nicht unterstützt als Stapeltrennzeichen.

Sie können EXEC verwenden um es jedoch in einem untergeordneten Batch auszuführen.

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

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

NB:Alle einfachen Anführungszeichen in der Abfrage müssen wie oben verdoppelt werden, um sie in einem Zeichenfolgenliteral zu maskieren.

Alternativ können Sie mit Hilfe einiger Standardeinschränkungen ähnliche Ergebnisse in einer einzigen Anweisung erzielen.

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;

Dies ist jedoch nicht genau dasselbe wie die ursprüngliche Abfrage, da die Standardeinschränkungen zurückgelassen werden und möglicherweise gelöscht werden müssen.