2016-09-20 2 views
0

Ich muss ein Skript ausführen, das eine neue Spalte zu einer Tabelle hinzufügt und dann diese Spalte basierend auf einer vorhandenen Spalte aktualisiert.Tabelle alter script fehlgeschlagen, da es nicht sehen kann, was es hinzuzufügen versucht

Allerdings, wenn ich es in einem Rutsch ausführen, es auf dem Update Fehler, sagen, dass "Spalte" nicht existiert.

Wenn ich es Zeile für Zeile ausführe, funktioniert es.

Gibt es eine Möglichkeit, dies zu umgehen?

Ich kann dies umgehen, indem Sie eine EXEC verwenden, um das UPDATE zu tun, aber das scheint hacky. Ist es die einzige Option?

Antwort

2

Das Problem ist, dass wenn die UPDATE kompiliert wird, die Spalte nicht bekannt ist. Ich denke, dass Sie dieses Problem beheben können, indem Sie GO zwischen den verschiedenen Befehlen einfügen.

Aber, warum nicht nur eine berechnete Spalte verwenden:

ALTER TABLE dbo.Table ADD [Column] AS COALESCE([ModifiedDate],[CreatedDate]) ; 

Mit einer berechneten Spalte, brauchen Sie nicht, ein Update zu tun, und der Wert ist immer richtig.

+0

Das wäre gut, eine gute Idee. Problem ist, dass die Änderung auf einen Fehler zurückzuführen ist. ModifiedDate und CreatedDate sind Prüffelder und sollten nicht von der Anwendung verwendet werden. Daher benötigen wir eine separate Spalte "Geschäftswert". – Craig

0

Ich denke auch, so wie @Gordon sagte, können Sie loszuwerden, das Problem erhalten, indem GO zwischen den Aussagen verwenden, wie unten:

PRINT 'Adding Column to Table...' 

ALTER TABLE dbo.[Table] ADD [Column] DATETIME2 NULL; 

GO 

PRINT 'Updating data...' 
UPDATE dbo.[Table] 
SET [column] = ISNULL([ModifiedDate],[CreatedDate]) 

GO 

PRINT 'Finalising table structure...' 
ALTER TABLE dbo.[Table] 
ALTER COLUMN [Column] DATETIME2 NOT NULL 

PRINT 'Complete!' 

Können Sie mit diesem Code versuchen Sie es. Ich habe Tabellenname in eckigen Klammern eingeschlossen, es ist ein reserviertes Schlüsselwort, so dass es in SQL2012 nicht ausgeführt werden konnte und ohne GO funktionierte es zu meinem Ende.

Verwandte Themen