Ich habe folgenden Code:
-- Start des Codes
set noexec off
declare @requiredVersion int
declare @currentVersion int
set @requiredVersion = 5
set @currentVersion = 4
if (@currentVersion < @requiredVersion)
begin
print 'Bitte aktualisieren Sie Ihre DB auf Version 5, bevor Sie dieses Skript ausführen.'
set noexec on
end
go
-- print 'Dummy'
insert into tblFooBar(name) values ('AAA')
go
set noexec off
-- Ende des Codes
Bitte beachten Sie, dass die Tabelle "tblfoobar" in der Datenbank nicht existiert. Wenn ich diesen Code ausführe, erscheint die Meldung:
Bitte aktualisieren Sie Ihre DB auf Version 5, bevor Sie dieses Skript ausführen.
Msg 208, Level 16, State 1, Zeile 1
Ungültiger Objektname 'tblFooBar'.
Ich hatte erwartet, dass das Setzen von noexec auf ON den Teil "Msg 208" der Meldung nicht anzeigen würde.
Wiederum kompiliert "set noexec on" den Code, führt ihn nicht aus. Versuchen, etwas in eine nicht vorhandene Tabelle einzufügen, ist ein Compile-Zeitfehler - ich vermute. Wenn das der Fall ist, sollte der Fehler bezüglich des "fehlenden Objekts" auftreten.
Jetzt will ich Ihnen das seltsame Verhalten erklären, das ich beobachtet habe. Wenn ich den Kommentar aus der Zeile "-- Print 'dummy'" entferne
-- Start des Codes
set noexec off
declare @requiredVersion int
declare @currentVersion int
set @requiredVersion = 5
set @currentVersion = 4
if (@currentVersion < @requiredVersion)
begin
print 'Bitte aktualisieren Sie Ihre DB auf Version 5, bevor Sie dieses Skript ausführen.'
set noexec on
end
go
print 'Dummy'
insert into tblFooBar(name) values ('AAA')
go
und den Code ausführe, erhalte ich nur folgende Meldung.
Bitte aktualisieren Sie Ihre DB auf Version 5, bevor Sie dieses Skript ausführen.
Diesmal gibt es keine Meldung über eine fehlende Tabelle.
Kann mir jemand dieses Verhalten bitte erklären? Danke.
0 Stimmen
Nur um sicherzustellen, dass wir auf derselben Seite sind: Ist das für den SQL Server? Welche Version?
0 Stimmen
Entschuldigung, ich hätte das erwähnen sollen. Ich habe diesen Code mit MS SQL 2000 ausprobiert.
0 Stimmen
Ich sehe das gleiche Verhalten in SQL 2005.
0 Stimmen
Yerp, sieht für mich ziemlich seltsam aus. Ich kann es nicht erklären. Ich musste dieses Feature noch nie benutzen.
0 Stimmen
Dies ist, wonach ich suche - wenn die DB-Version niedriger ist als erwartet, möchte ich den Rest des Skripts nicht ausführen. Das Skript enthält sowohl DDL- als auch DML-Anweisungen.