Par défaut, SQLCMD envoie tous les messages non d'erreur et les messages d'erreur à stdout . Par conséquent, tenter de rediriger la sortie n'aidera pas.
La première chose que vous devez faire pour obtenir uniquement l'un ou l'autre type de messages (erreur ou non) est de dire à SQLCMD de les séparer en envoyant les messages d'erreur (niveau de gravité 11 ou supérieur) à stderr . Pour ce faire, utilisez le -rcommutateur de ligne de commande, en spécifiant 0comme option pour ce commutateur (c'est-à-dire -r0). À ce stade, il n'y a aucune différence visible en termes d'exécution de SQLCMD et de voir les messages de tout type affichés à l'écran.
La partie suivante consiste à filtrer les messages réguliers envoyés à stdout . Cela peut être fait en redirigeant les messages stdout vers quelque part via >, mais où? Vous pourriez le faire > file.txt, mais je doute que vous vouliez un fichier des messages que vous ne vouliez pas commencer. Heureusement, DOS a le NULmot - clé (qui n'est pas un typeo: il en a un L, pas deux) qui fonctionne comme /dev/nullsous Unix. Signifie que vous pouvez utiliser ce qui suit pour rediriger la sortie vers nulle part: > NUL.
Ce qui suit exécutera la PRINTcommande et n'affichera aucune sortie car aucune erreur n'est générée et aucun fichier n'est créé qui contiendrait la sortie de la PRINTcommande:
CD %TEMP%
SQLCMD -E -Q "print 1;" -r0 > NUL
Mais ce qui suit affiche un message d'erreur car ceux-ci ne sont pas redirigés vers NUL:
CD %TEMP%
SQLCMD -E -Q "print a;" -r0 > NUL
Retour:
Msg 128, Level 15, State 1, Server DALI, Line 1
The name "a" is not permitted in this context. Valid expressions are constants,
constant expressions, and (in some contexts) variables. Column names are not permitted.
2> Err.txt, mais il semble queSQLCMDcela ne divise pas sa sortie.