Wie @Noodles zeigte in den Kommentaren zu Ihrer Frage aus Sie den dritten Parameter der Run
Methode (bWaitOnReturn
) zu True
, so dass Ihre VBScript warten auf den externen Befehl auszuführen einstellen müssen.
Das allein reicht jedoch nicht aus. Sie müssen auch sqlcmd
mit dem zusätzlichen Parameter ausführen -b
, um es im Fall eines Fehler einen von Null verschiedenen Exit-Code zu machen zurück:
-b
Specifies that sqlcmd
exits and returns a DOS ERRORLEVEL value when an error occurs. The value that is returned to the DOS ERRORLEVEL variable is 1 when the SQL Server error message has a severity level greater than 10; otherwise, the value returned is 0. If the -V
option has been set in addition to -b
, sqlcmd
will not report an error if the severity level is lower than the values set using -V
. Command prompt batch files can test the value of ERRORLEVEL and handle the error appropriately. sqlcmd does not report errors for severity level 10 (informational messages).
If the sqlcmd
script contains an incorrect comment, syntax error, or is missing a scripting variable, ERRORLEVEL returned is 1.
Und Sie brauchen nicht cmd /c
, weil externer Befehl keine internationalen Integrierte CMD-Funktionen (wie interne Befehle, Pipeline oder Umleitung).
Verwenden Sie auch nicht err
als Variablenname. VBScript verfügt über ein internes globales Objekt Err
für die Bereitstellung von Laufzeitfehlerinformationen, die automatisch ausgefüllt werden, wenn ein Laufzeitfehler auftritt. Wenn Sie versuchen, einen Wert zuzuweisen, sollte dies zu einem Fehler führen.
Ändern Sie Ihren Code so etwas wie dieses:
rc = objshell.Run("sqlcmd -b -U sa -P Password -i c:\temp\abc.sql", 1, True)
If rc <> 0 Then
WriteLog "Error running SQL = " & rc
Else
WriteLog "Successfully run SQL"
End If
lesen helfen _bWaitOnReturn Optional. Boolescher Wert, der angibt, ob das Skript auf die Ausführung des Programms warten soll, bevor es mit der nächsten Anweisung in Ihrem Skript fortfährt. Wenn diese Eigenschaft auf "true" gesetzt ist, wird die Skriptausführung angehalten, bis das Programm beendet wird, und "Run" gibt den vom Programm zurückgegebenen Fehlercode zurück. Wenn sie auf false gesetzt ist (der Standardwert), kehrt die Run-Methode unmittelbar nach dem Start des Programms zurück und gibt automatisch 0 zurück (nicht als Fehlercode zu interpretieren) ._ –
Perfekt - vielen Dank – Qazxswe