Wie kann SQLCMD beim Ausführen einer SQL-Skriptdatei dazu gebracht werden, nur Fehler oder Warnungen auszugeben, auf die es stößt?
Ich möchte im Wesentlichen nicht, dass informationsbasierte Nachrichten ausgegeben werden.
sql-server
sql-server-2008-r2
sqlcmd
bytedev
quelle
quelle
2> Err.txt
, aber es sieht so aus, als würdeSQLCMD
die Ausgabe nicht aufgeteilt.-r0
In diesem Fall können sie mithilfe von in eine Datei umgeleitet2>
oder angezeigt werden, während reguläre Nachrichten über umgeleitet werden>
. Bitte sehen Sie meine Antwort für Details.Antworten:
Standardmäßig sendet SQLCMD alle Nicht-Fehlermeldungen und Fehlermeldungen an stdout . Daher hilft der Versuch, die Ausgabe umzuleiten, nicht weiter.
Das erste, was Sie tun müssen, um nur den einen oder anderen Nachrichtentyp (Fehler oder Nichtfehler ) zu erhalten, ist, SQLCMD anzuweisen , diese zu trennen, indem Sie die Fehlermeldungen (Schweregrad 11 oder höher) an stderr senden . Sie tun dies, indem Sie den
-r
Befehlszeilenschalter verwenden und0
als Option für diesen Schalter (dh-r0
) angeben . Zu diesem Zeitpunkt gibt es keinen sichtbaren Unterschied hinsichtlich der Ausführung von SQLCMD und der Anzeige von Nachrichten jeglicher Art, die auf dem Bildschirm angezeigt werden.Der nächste Teil besteht darin, die regulären Nachrichten herauszufiltern, die an stdout gesendet werden . Dies kann durch Umleiten der Standardnachrichten an einen beliebigen Ort erfolgen
>
, aber wohin? Sie könnten es tun> file.txt
, aber ich bezweifle, dass Sie eine Datei mit den Nachrichten möchten, mit denen Sie nicht beginnen wollten. Glücklicherweise hat DOS dasNUL
Schlüsselwort (das ist kein Tippfehler: es hat einsL
, nicht zwei), das wie/dev/null
in Unix funktioniert . Das heißt, Sie können Folgendes verwenden, um die Ausgabe nach nirgendwo umzuleiten :> NUL
.Im Folgenden wird der
PRINT
Befehl ausgeführt und keine Ausgabe angezeigt, da keine Fehler generiert werden und keine Datei erstellt wird, die die Ausgabe desPRINT
Befehls enthält:Im Folgenden wird jedoch eine Fehlermeldung angezeigt, da diese nicht umgeleitet werden
NUL
:Kehrt zurück:
quelle
Folgendes wird funktionieren:
sqlcmd -U user -P pass -S Server -Q "sp_who" -r0 1> test.log
Die Ausgabe der Abfrage wird in das Protokoll aufgenommen und nichts wird auf dem Bildschirm gedruckt.
Weitere Details finden Sie im MSDN-Artikel auf sqlcmd .
quelle
-r1
sendet alle Nachrichten an stderr , einschließlichPRINT
undRAISERROR('', 10, 1)
Nachrichten. Sie verwenden müssen ,-r0
um halten diese regelmäßigen Info - Nachrichten gehen stdout , so dass sie umgeleitet werden test.log .Fand dies auf SQLServerCentral
http://www.sqlservercentral.com/Forums/Topic536968-146-1.aspx
quelle
-r1
sendet alle Nachrichten an stderr , einschließlichPRINT
undRAISERROR('', 10, 1)
Nachrichten. Sie müssen verwenden-r0
, um diese regulären Info-Nachrichten so zu speichern , dass sie zu install.log umgeleitet werden .