Ich verwende sqlcmd aus einer Batch-Datei und frage mich, wie ich es dazu bringen kann, ein anderes ERRORLEVEL als 0 zurückzugeben, wenn bei der Sicherung etwas schief geht.
sql-server
sql-server-2008-r2
sqlcmd
leeand00
quelle
quelle
Antworten:
Sie sollten die Option -b in sqlcmd verwenden.
-b Gibt an, dass sqlcmd beendet wird und bei Auftreten eines Fehlers einen DOS-ERRORLEVEL-Wert zurückgibt. Der Wert, der an die DOS-Variable ERRORLEVEL zurückgegeben wird, ist 1, wenn die SQL Server-Fehlermeldung einen Schweregrad von mehr als 10 aufweist. Andernfalls lautet der zurückgegebene Wert 0
http://msdn.microsoft.com/en-us/library/ms162773.aspx
quelle
Auf der Seite MSDN SQLCMD Utility unter: http://msdn.microsoft.com/en-us/library/ms162773.aspx
Sie könnten den
BACKUP DATABASE...
Befehl also in einenTRY...CATCH
Block einschließen und die entsprechende Fehlermeldung auslösen, diesqlcmd
dann zu Ihrer Batch-Datei zurückkehren würde.Betrachten Sie zum Beispiel die folgende
errorleveltest.sql
Datei:Und die folgende .bat-Datei: (Die erste Zeile wird zur besseren Lesbarkeit umbrochen, muss sich jedoch in einer einzelnen Zeile befinden.)
Dies gibt Folgendes an meiner Eingabeaufforderung cmd.exe zurück:
Wie Sie sehen, wird ERRORLEVEL 1 anstelle des normalen Rückgabewerts 0 zurückgegeben. Ich kann den ERRORLEVEL nicht ermitteln, um die tatsächliche Fehlernummer wiederzugeben, in diesem Fall 50002; Möglicherweise liegt ein Problem in meinem Code vor, oder es liegt ein Problem mit meiner Umgebung vor.
quelle
ERRORLEVEL
sollte nicht erwartet werden, dass der Wert mit der von SQL Server gemeldeten Fehlernummer übereinstimmt. Die Fehlernummer ist ein SQL Server-spezifischer Wert, der angibt, warum sie beendet wurde (z. B. SQL Server). AndererseitsERRORLEVEL
gibt ein SQLCMD-spezifischer Wert an, warum er beendet wurde (dh SQLCMD).