Comment pouvez-vous obtenir SQLCMD, lors de l'exécution d'un fichier de script SQL, pour simplement afficher les erreurs ou avertissements qu'il rencontre?
Je ne veux essentiellement pas que des messages basés sur des informations soient générés.
sql-server
sql-server-2008-r2
sqlcmd
bytedev
la source
la source
2> Err.txt
, mais il semble queSQLCMD
cela ne divise pas sa sortie.-r0
commutateur de ligne de commande, auquel cas elles peuvent être redirigées vers un fichier à l'aide de2>
, ou elles peuvent être affichées pendant que les messages normaux sont redirigés via>
. Veuillez consulter ma réponse pour plus de détails.Réponses:
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
-r
commutateur de ligne de commande, en spécifiant0
comme 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 leNUL
mot - clé (qui n'est pas un typeo: il en a unL
, pas deux) qui fonctionne comme/dev/null
sous Unix. Signifie que vous pouvez utiliser ce qui suit pour rediriger la sortie vers nulle part:> NUL
.Ce qui suit exécutera la
PRINT
commande 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 laPRINT
commande:Mais ce qui suit affiche un message d'erreur car ceux-ci ne sont pas redirigés vers
NUL
:Retour:
la source
Les éléments suivants fonctionneront:
sqlcmd -U user -P pass -S Server -Q "sp_who" -r0 1> test.log
Le résultat de la requête sera mis dans le journal et rien ne sera imprimé à l'écran.
Plus de détails sur l' article MSDN sur sqlcmd .
la source
-r1
envoie tous les messages à stderr , y comprisPRINT
etRAISERROR('', 10, 1)
messages. Vous devez utiliser-r0
pour conserver ces messages d'information réguliers sur stdout de sorte qu'ils soient redirigés vers test.log .Trouvé ceci sur SQLServerCentral
http://www.sqlservercentral.com/Forums/Topic536968-146-1.aspx
la source
-r1
envoie tous les messages à stderr , y comprisPRINT
etRAISERROR('', 10, 1)
messages. Vous devez utiliser-r0
pour conserver ces messages d'information réguliers sur stdout de sorte qu'ils soient redirigés vers install.log .