J'exécute sqlcmd à partir d'un fichier de commandes et je me demandais comment lui faire renvoyer un ERRORLEVEL autre que 0 en cas de problème avec la sauvegarde.
sql-server
sql-server-2008-r2
sqlcmd
leeand00
la source
la source
Réponses:
Vous devez utiliser l'option -b dans sqlcmd.
-b Spécifie que sqlcmd se ferme et renvoie une valeur DOS ERRORLEVEL lorsqu'une erreur se produit. La valeur renvoyée à la variable DOS ERRORLEVEL est 1 lorsque le message d'erreur SQL Server a un niveau de gravité supérieur à 10; sinon, la valeur renvoyée est 0
http://msdn.microsoft.com/en-us/library/ms162773.aspx
la source
De la page Utilitaire MSDN SQLCMD à l’ adresse : http://msdn.microsoft.com/en-us/library/ms162773.aspx
Vous pouvez donc envelopper la
BACKUP DATABASE...
commande dans unTRY...CATCH
bloc et générer le message d'erreur approprié, quisqlcmd
sera ensuite renvoyé dans votre fichier de commandes.Par exemple, considérons le
errorleveltest.sql
fichier suivant :Et le fichier .bat suivant: (la première ligne est encapsulée pour des raisons de lisibilité, mais doit figurer sur une seule ligne.)
Cela retourne ce qui suit à partir de mon invite cmd.exe:
Comme vous pouvez le constater, ERRORLEVEL 1 est renvoyé au lieu de la valeur de retour normale de 0. Je ne parviens pas à obtenir que ERRORLEVEL reflète le numéro d'erreur actuel, dans ce cas 50002; peut-être il y a un problème dans mon code, ou peut-être il y a un problème avec mon environnement.
la source
ERRORLEVEL
ne devrait pas avoir la même valeur que le numéro d’erreur rapporté par SQL Server. ErrorNumber est une valeur spécifique à SQL Server indiquant la raison pour laquelle elle (SQL Server) s'est terminée. D'autre part,ERRORLEVEL
une valeur spécifique à SQLCMD indique pourquoi elle (c'est-à-dire SQLCMD) s'est terminée.