2016-03-24 13 views
1

Ich habe mehrere sqlcmd-Befehle gleichzeitig aus einer Batch-Datei ausführen. Jede Anweisung, wenn sie separat ausgeführt wird, funktioniert perfekt. Aber wenn ich wie 5 sqlsmd-Befehle in einer bat-Datei gebe, führt es nur die erste aus und dann sehe ich 1> in meinem Kommandozeilen-Bildschirm und nichts passiert. Wie löst man das?mehrere sqlcmd-Befehle in einer Batch-Datei

Hinweis: CALL-Anweisung vor jeder Zeile, die nicht funktioniert ist die einzige Lösung, die ich in meinem reseach gefunden

Beispiel dafür, was ich bin ::

sqlcmd -S servername-q "EXEC msdb.dbo.prc_Backup @BackupType = 'L'  ,@DBName = 'db' ,@BackupDir = 'J:\MSSQL10.MSSQLSERVER\MSSQL\Backup\db2dba' ,@RetainHours = 47  , @create_sub_dir = 0  " >> C:\tlogresult.txt 
sqlcmd -S servername -q "EXEC msdb.dbo.prc_Backup @BackupType = 'L'  ,@DBName = 'DB2RuntimeMigration' ,@BackupDir = 'J:\MSSQL10.MSSQLSERVER\MSSQL\Backup\DB2RuntimeMigration' ,@RetainHours = 47   , @create_sub_dir = 0  " >> C:\tlogresult.txt 
+0

was die Ausgabe ist, wenn Sie führen es von einer Befehlszeile aus, damit Sie die Ausgabe sehen können? Gibt es eine Pause und wartet auf eine Antwort von Ihnen? –

+0

@BruceDunwiddie In der Ausgabedatei sehe ich nur das Ergebnis der ersten Befehlsausführung. Im Befehlsfenster sehe ich keine Eingaben, die an mich gerichtet sind. nur eine Zeile blinkt nach dem ersten Befehl .. dann beginnt auf etwas zu warten .. für was ich nicht in der Lage bin es herauszufinden. – Ramya

+0

Wenn Sie das Äquivalent der Ausgabe des Backup-STATS hinzufügen können, sollten Sie den angezeigten Fortschritt oder Fehler in der Datei tlogresults.txt sehen –

Antwort

0

Ich bin nicht in der Lage es über Bat-Datei auszuführen. Was ich tun kann, ist, die Befehle mit QUIT am Ende jedes Befehls von der Befehlszeile aus auszuführen.

0

https://msdn.microsoft.com/en-us/library/ms180944.aspx

tun Wenn der Befehl ohne Eingabedateien oder Abfragen ausgeführt wird, stellt sqlcmd eine Verbindung zur angegebenen Instanz von SQL Server her und zeigt dann eine neue Zeile mit einer 1> gefolgt von einem blinkenden Unterstrich an, der als sqlcmd-Eingabeaufforderung bezeichnet wird. Die 1 bedeutet, dass dies die erste Zeile einer Transact-SQL-Anweisung, und die sqlcmd Prompt ist der Punkt, an dem die Transact-SQL-Anweisung wird gestartet, wenn Sie es eingeben.

Am sqlcmd Aufforderung Sie kann sowohl Transact-SQL-Anweisungen als auch sqlcmd-Befehle wie GO und EXIT eingeben. Jede Transact-SQL-Anweisung wird in einen Puffer gestellt, der als Anweisungscache bezeichnet wird. Diese Anweisungen werden an SQL Server gesendet, nachdem Sie den Befehl GO eingegeben und die EINGABETASTE gedrückt haben. Geben Sie EXIT oder QUIT am Anfang einer neuen Zeile ein, um sqlcmd zu beenden.

...

Verwenden Sie die Option -o in einer Datei stattdessen die Ausgabe in eine Datei von Rohrleitungen, die Ausgabe und das sollte man am Eintritt in den interaktiven Modus verhindern.

oder versuchen

sqlcmd -S servername-q "EXEC msdb.dbo.prc_Backup @BackupType = 'L'  ,@DBName = 'db' ,@BackupDir = 'J:\MSSQL10.MSSQLSERVER\MSSQL\Backup\db2dba' ,@RetainHours = 47  , @create_sub_dir = 0  " >> C:\tlogresult.txt 
exit 
sqlcmd -S servername -q "EXEC msdb.dbo.prc_Backup @BackupType = 'L'  ,@DBName = 'DB2RuntimeMigration' ,@BackupDir = 'J:\MSSQL10.MSSQLSERVER\MSSQL\Backup\DB2RuntimeMigration' ,@RetainHours = 47   , @create_sub_dir = 0  " >> C:\tlogresult.txt" 
exit 
+0

Ich möchte die Ausgabedatei anhängen, da wir Protokolle für etwa 20.000 tlog-Sicherungen überprüfen müssen. Irgendwelche Arbeiten um die Ausgabedatei anzufügen? – Ramya

+0

Die obige Dokumentationsseite besagt, dass Sie die EXIT- oder QUIT-Anweisungen verwenden können, um den interaktiven Modus zu beenden. Versuchen Sie, eines davon zwischen Ihre sqlcmd-Aufrufe zu setzen, wenn das -o nicht zum Anhängen funktioniert. –

+0

Dieser Link ist für interaktive sqlcmd ohne -q Parameter. Ich weiß nur nicht, wie es zu beheben ist. Wenn Sie mir ein Beispielskript zur Verfügung stellen könnten, das wäre großartig. – Ramya

1

Hauptstadt Versuchen Q

nicht verwenden [-q "cmdline Abfrage"]

sondern nutzen [-Q "cmdline Abfrage" und Ausfahrt]

Verwandte Themen