Dieser Artikel wurde manuell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. |
Übersetzung
Original
|
sqlcmd (Hilfsprogramm)
Mit dem Hilfsprogramm sqlcmd können Sie an der Eingabeaufforderung, im Abfrage-Editor im SQLCMD-Mode, in einer Windows-Skriptdatei oder in einem Auftragsschritt des Betriebssystems (Cmd.exe) eines SQL Server-Agent-Auftrags Transact-SQL-Anweisungen, Systemprozeduren und Skriptdateien eingeben. Dieses Hilfsprogramm verwendet zum Ausführen von Transact-SQL-Batches ODBC.
Wichtig
|
|---|
|
SQL Server Management Studio verwendet Microsoft .NET Framework SqlClient für die Ausführung im regulären und im SQLCMD-Modus des Abfrage-Editors. Beim Ausführen von sqlcmd über die Befehlszeile verwendet sqlcmd den ODBC-Treiber. Da unterschiedliche Standardoptionen gelten können, führt die Ausführung derselben Abfrage im SQLCMD-Modus von SQL Server Management Studio und im Hilfsprogramm sqlcmd möglicherweise zu unterschiedlichen Ergebnissen. |
Derzeit erfordert sqlcmd kein Leerzeichen zwischen der Befehlszeilenoption und dem Wert. In einer zukünftigen Version kann jedoch ein Leerzeichen zwischen der Befehlszeilenoption und dem Wert erforderlich sein.
sqlcmd -a packet_size -A (dedicated administrator connection) -b (terminate batch job if there is an error) -c batch_terminator -C (trust the server certificate) -d db_name -e (echo input) -E (use trusted connection) -f codepage | i:codepage[,o:codepage] | o:codepage[,i:codepage] -h rows_per_header -H workstation_name -i input_file -I (enable quoted identifiers) -k[1 | 2] (remove or replace control characters) -K application_intent -l login_timeout -L[c] (list servers, optional clean output) -m error_level -N (encrypt connection) -o output_file -p[1] (print statistics, optional colon format) -P password -q "cmdline query" -Q "cmdline query" (and exit) -r[0 | 1] (msgs to stderr) -R (use client regional settings) -s col_separator -S [protocol:]server[\instance_name][,port] -t query_timeout -u (unicode output file) -U login_id -v var = "value" -V error_severity_level -w column_width -W (remove trailing spaces) -x (disable variable substitution) -X[1] (disable commands, startup script, environment variables and optional exit) -y variable_length_type_display_width -Y fixed_length_type_display_width -z new_password -Z new_password (and exit) -? (usage)
Die Optionen müssen nicht in der Reihenfolge verwendet werden, in der sie im Abschnitt zur Syntax gezeigt wurden.
Wenn mehrere Ergebnisse zurückgegeben werden, gibt sqlcmd eine Leerzeile zwischen den einzelnen Resultsets in einem Batch aus. Außerdem wird die Meldung "<x> Zeilen betroffen" nicht angezeigt, wenn sie für die ausgeführte Anweisung nicht gilt.
Wenn Sie sqlcmd interaktiv verwenden möchten, geben Sie an der Eingabeaufforderung sqlcmd und eine oder mehrere der oben in diesem Thema beschriebenen Optionen ein. Weitere Informationen finden Sie unter Verwenden des Hilfsprogramms sqlcmd.
Hinweis
|
|---|
|
Mit den Optionen -L, -Q, -Z oder -i wird sqlcmd nach der Ausführung beendet. |
Die gesamte Länge der sqlcmd-Befehlszeile in der Befehlsumgebung (Cmd.exe) einschließlich aller Argumente und erweiterten Variablen entspricht der Länge, die im Betriebssystem für Cmd.exe bestimmt wurde.
-
Umgebungsvariablen auf Systemebene
-
Umgebungsvariablen auf Benutzerebene
-
Vor der Ausführung von sqlcmd an der Eingabeaufforderung festgelegte Befehlsshell (SET X=Y)
-
sqlcmd-v X=Y
-
:Setvar X Y
Hinweis
|
|---|
|
Öffnen Sie die Systemsteuerung, klicken Sie auf System und anschließend auf die Registerkarte Erweitert, um die Umgebungsvariablen anzuzeigen. |
|
Variable |
Damit verbundene Schalter |
R/W |
Standard |
|---|---|---|---|
|
SQLCMDUSER |
-U |
R |
"" |
|
SQLCMDPASSWORD |
-P |
-- |
"" |
|
SQLCMDSERVER |
-S |
R |
"DefaultLocalInstance" |
|
SQLCMDWORKSTATION |
-H |
R |
"ComputerName" |
|
SQLCMDDBNAME |
-d |
R |
"" |
|
SQLCMDLOGINTIMEOUT |
-l |
R/W |
"8" (Sekunden) |
|
SQLCMDSTATTIMEOUT |
-t |
R/W |
"0" = unbegrenzt warten |
|
SQLCMDHEADERS |
-h |
R/W |
"0" |
|
SQLCMDCOLSEP |
-s |
R/W |
" " |
|
SQLCMDCOLWIDTH |
-w |
R/W |
"0" |
|
SQLCMDPACKETSIZE |
-a |
R |
"4096" |
|
SQLCMDERRORLEVEL |
-m |
R/W |
0 |
|
SQLCMDMAXVARTYPEWIDTH |
-y |
R/W |
"256" |
|
SQLCMDMAXFIXEDTYPEWIDTH |
-Y |
R/W |
"0" = unbegrenzt |
|
SQLCMDEDITOR |
|
R/W |
"edit.com" |
|
SQLCMDINI |
|
R |
"" |
SQLCMDUSER, SQLCMDPASSWORD und SQLCMDSERVER werden festgelegt, wenn :Connect
verwendet wird.
Durch R wird angezeigt, dass der Wert nur einmal während der Programminitialisierung festgelegt werden kann.
Durch R/W wird angezeigt, dass der Wert mithilfe des setvar-Befehls geändert werden kann und auf nachfolgende Befehle der neue Wert angewendet wird.
Zusätzlich zu den Transact-SQL-Anweisungen in sqlcmd sind auch die folgenden Befehle verfügbar:
|
GO [count] |
:List |
|
[:] RESET |
:Error |
|
[:] ED |
:Out |
|
[:] !! |
:Perftrace |
|
[:] QUIT |
:Connect |
|
[:] EXIT |
:On Error |
|
:r |
:Help |
|
:ServerList |
:XML [ON | OFF] |
|
:Setvar |
:Listvar |
Beachten Sie bei der Verwendung von sqlcmd-Befehlen Folgendes:
-
Mit Ausnahme von GO muss vor allen sqlcmd-Befehlen ein Doppelpunkt (:) angegeben werden.
Wichtig
Aus Gründen der Abwärtskompatibilität mit bestehenden osql-Skripts werden einige der Befehle auch ohne Angabe des Doppelpunkts erkannt. Dies wird durch [:] angezeigt.
-
sqlcmd-Befehle werden nur erkannt, wenn sie am Anfang einer Zeile stehen.
-
Bei keinem sqlcmd-Befehl wird die Groß- und Kleinschreibung beachtet.
-
Jeder Befehl muss in einer eigenen Zeile stehen. Auf einen Befehl darf keine Transact-SQL-Anweisung oder ein anderer Befehl folgen.
-
Die Befehle werden sofort ausgeführt. Sie werden nicht wie Transact-SQL-Anweisungen in den Ausführungspuffer gestellt.
sqlcmd-Dateinamen
sqlcmd-Eingabedateien können mit der Option -i oder dem Befehl :r angegeben werden. Ausgabedateien können mit der Option -o oder den Befehlen :Error, :Out und :Perftrace angegeben werden. Es folgen einige Richtlinien für das Verwenden dieser Dateien:
-
:Error, :Out und :Perftrace sollten separate <filename>-Parameter verwenden. Falls derselbe <filename>-Parameter verwendet wird, werden die Eingaben der Dateien womöglich vermischt.
-
Wenn eine Eingabedatei auf einem Remoteserver einen Laufwerksdateipfad wie z. B. :out c:\OutputFile.txt enthält und von sqlcmd auf einem lokalen Computer aufgerufen wird, wird die Ausgabedatei auf dem lokalen Computer und nicht auf dem Remoteserver erstellt.
-
Gültige Dateipfade sind beispielsweise C:\<filename>, \\<Server>\<Freigabe$>\<filename> und "C:\Ein Ordner\<file name>". Verwenden Sie Anführungszeichen, wenn der Pfad ein Leerzeichen enthält.
-
Mit jeder neuen sqlcmd-Sitzung werden eventuell schon vorhandene gleichnamige Dateien überschrieben.
Informationsmeldungen
sqlcmd gibt alle vom Server gesendeten Informationsmeldungen aus. Im folgenden Beispiel wird eine Informationsmeldung ausgegeben, nachdem die Transact-SQL-Anweisungen ausgeführt wurden.
Geben Sie an der Eingabeaufforderung Folgendes ein:
sqlcmd
At the sqlcmd prompt type:
USE AdventureWorks2012;
GO
Wenn Sie die EINGABETASTE drücken, wird die folgende Informationsmeldung ausgegeben: "Der Datenbankkontext wurde auf 'AdventureWorks2012' geändert."
Ausgabeformat von Transact-SQL-Abfragen
sqlcmd gibt zuerst eine Spaltenüberschrift aus, die die in der SELECT-Liste angegebenen Spaltennamen enthält. Die Spaltennamen werden durch das SQLCMDCOLSEP-Zeichen getrennt. Standardmäßig handelt es sich hierbei um ein Leerzeichen. Wenn der Spaltenname kürzer als die Spaltenbreite ist, wird die Ausgabe bis zur nächsten Spalte mit Leerzeichen aufgefüllt.
Auf diese Zeile folgt eine Trennlinie, die durch eine Reihe von Bindestrichen dargestellt wird. Die folgende Ausgabe zeigt ein Beispiel.
Starten Sie sqlcmd. Geben Sie an der sqlcmd-Eingabeaufforderung Folgendes ein:
USE AdventureWorks2012;
SELECT TOP (2) BusinessEntityID, FirstName, LastName
FROM Person.Person;
GO
Wenn Sie die EINGABETASTE drücken, wird das folgende Resultset zurückgegeben.
BusinessEntityID FirstName LastName
---------------- ------------ ----------
285 Syed Abbas
293 Catherine Abel
(2 row(s) affected)
Obwohl die BusinessEntityID-Spalte nur 4 Zeichen breit ist, wurde sie erweitert, um den längeren Spaltennamen aufzunehmen. Standardmäßig wird die Ausgabe mit dem 80. Zeichen beendet. Dies kann geändert werden, indem Sie die Option -w verwenden oder die SQLCMDCOLWIDTH-Skriptvariable festlegen.
XML-Ausgabeformat
Die XML-Ausgabe, die sich aus der FOR XML-Klausel ergibt, wird unformatiert in einem fortlaufenden Datenstrom ausgegeben.
Verwenden Sie den Befehl :XML ON, wenn Sie eine Ausgabe im XML-Format erwarten.
Hinweis
|
|---|
|
sqlcmd gibt Fehlermeldungen im üblichen Format zurück. Beachten Sie, dass die Fehlermeldungen auch im XML-Textstrom im XML-Format ausgegeben werden. Mit :XML ON zeigt sqlcmd keine Informationsmeldungen an. |
Verwenden Sie den folgenden Befehl, um den XML-Modus zu deaktivieren: :XML OFF.
Der GO-Befehl sollte nicht verwendet werden, bevor der XML OFF-Befehl ausgegeben wurde, da XML OFF bewirkt, dass sqlcmd zur zeilenbasierten Ausgabe zurückkehrt.
Es ist nicht möglich, XML-Daten (Datenstrom) und Rowsetdaten zu mischen. Wenn der XML ON-Befehl nicht ausgegeben wurde, bevor eine Transact-SQL-Anweisung, die XML-Datenströme ausgibt, ausgeführt wurde, wird die Ausgabe nicht richtig dargestellt. Wenn der XML ON-Befehl ausgegeben wurde, können Sie keine Transact-SQL-Anweisungen ausführen, die reguläre Rowsets ausgeben.
Hinweis
|
|---|
|
Der :XML-Befehl unterstützt die SET STATISTICS XML-Anweisung nicht. |
Die folgenden Methoden haben sich dazu bewährt, Sicherheit und Effizienz zu optimieren.
-
Verwenden Sie die integrierte Sicherheit von Windows.
-
Verwenden Sie in automatisierten Umgebungen -X.
-
Sichern Sie Eingabe- und Ausgabedateien, indem Sie die geeigneten NTFS-Dateisystemberechtigungen verwenden.
-
Führen Sie aus Leistungsgründen möglichst alle Aufgaben in einer einzigen sqlcmd-Sitzung, nicht in einer Reihe von verschiedenen Sitzungen durch.
-
Legen Sie für Batch- bzw. Abfragetimeouts Werte fest, die höher sind als die erwartete Ausführungsdauer.
Sicherheitshinweis
Hinweis