Freigeben über


sqlcmd (Hilfsprogramm)

Mit dem Hilfsprogramm sqlcmd können Sie an der Eingabeaufforderung (im Abfrage-Editor im SQLCMD-Modus) 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 OLE DB.

Wichtiger HinweisWichtig

SQL Server Management Studio verwendet Microsoft .NET Framework SqlClient für die Ausführung im regulären Modus und im SQLCMD-Modus des Abfrage-Editors. Wenn sqlcmd über die Befehlszeile ausgeführt wird, verwendet sqlcmd den OLE DB-Anbieter. 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.

Syntax

sqlcmd 
[{ { -U login_id [ -P password ] } | –E trusted connection }] 

[ -N encrypt connection ][ -C trust the server certificate ]
[ -z new password ] [ -Z new password and exit]
[ -S [protocol:]server[\instance_name][,port] ] [ -H wksta_name ] [ -d db_name ]
[ -l login time_out ] [ -A dedicated admin connection] 
[ -i input_file ] [ -o output_file ]
[ -f < codepage > | i: < codepage > [ < , o: < codepage > ] ]
[ -u unicode output] [ -r [ 0 | 1 ] msgs to stderr ] 
[ -R use client regional settings]
[ -q "cmdline query" ] [ -Q "cmdline query" and exit] 
[ -e echo input ] [ -t query time_out ] 
[ -I enable Quoted Identifiers ] 
[ -v var = "value"...] [ -x disable variable substitution ]
[ -h headers ][ -s col_separator ] [ -w column_width ] 
[ -W remove trailing spaces ]
[ -k [ 1 | 2 ] remove[replace] control characters ] 
[ -y display_width ] [-Y display_width ]
[ -b on error batch abort] [ -V severitylevel ] [ -m error_level ] 
[ -a packet_size ][ -c cmd_end ] 
[ -L [ c ] list servers[clean output] ] 
[ -p [ 1 ] print statistics[colon format]] 
[ -X [ 1 ] ] disable commands, startup script, enviroment variables [and exit] 
[ -? show syntax summary]

Befehlszeilenoptionen

  • Anmeldeoptionen

  • -Ulogin_id
    Die Benutzeranmelde-ID.

    HinweisHinweis

    Die OSQLUSER-Umgebungsvariable steht aus Gründen der Abwärtskompatibilität zur Verfügung. Die SQLCMDUSER-Umgebungsvariable hat Vorrang vor der OSQLUSER-Umgebungsvariable. Dies bedeutet, dass sqlcmd und osql problemlos miteinander verwendet werden können. Außerdem sind vorhandene osql-Skripts weiterhin funktionsfähig.

    Wenn weder -U noch -P angegeben wird, versucht sqlcmd, die Verbindung im Microsoft Windows-Authentifizierungsmodus herzustellen. Die Authentifizierung basiert auf dem Windows-Konto des Benutzers, der sqlcmd ausführt.

    Wird die Option -U zusammen mit der Option -E verwendet (wie weiter unten in diesem Thema beschrieben), wird eine Fehlermeldung generiert. Werden nach der Option –U mehrere Argumente angegeben, wird eine Fehlermeldung generiert, und das Programm wird beendet.

  • -Ppassword
    Ein vom Benutzer angegebenes Kennwort. Bei Kennwörtern muss die Groß-/Kleinschreibung beachtet werden. Wenn die Option -U verwendet wird, nicht aber die Option -P, und die SQLCMDPASSWORD-Umgebungsvariable nicht festgelegt wurde, wird der Benutzer von sqlcmd zur Angabe eines Kennworts aufgefordert. Wird die Option -P am Ende der Befehlszeile ohne Angabe eines Kennworts verwendet, verwendet sqlcmd das Standardkennwort (NULL).

    SicherheitshinweisSicherheitshinweis

    Verwenden Sie kein leeres Kennwort. Verwenden Sie ein sicheres Kennwort. Weitere Informationen finden Sie unter Sichere Kennwörter.

    Die Aufforderung zur Eingabe des Kennworts wird folgendermaßen an der Konsole ausgegeben: Password:

    Die Benutzereingabe bleibt verborgen, d. h. es erfolgt keine Anzeige, und der Cursor bleibt an der Anfangsposition.

    Über die SQLCMDPASSWORD-Umgebungsvariable können Sie ein Standardkennwort für die aktuelle Sitzung festlegen. Aus diesem Grund ist die Hartcodierung von Kennwörtern in Batchdateien nicht notwendig.

    Im folgenden Beispiel wird zuerst die SQLCMDPASSWORD-Variable an der Eingabeaufforderung festgelegt und dann auf das Hilfsprogramm sqlcmd zugegriffen. Geben Sie Folgendes an der Eingabeaufforderung ein:

    SET SQLCMDPASSWORD= p@a$$w0rd

    SicherheitshinweisSicherheitshinweis

    Das Kennwort kann von jeder Person gelesen werden, die auf den Computerbildschirm schauen kann.

    Geben Sie Folgendes an der daraufhin angezeigten Eingabeaufforderung ein:

    sqlcmd

    Wenn die Kombination aus Benutzername und Kennwort falsch ist, generiert der OLE DB-Anbieter eine Fehlermeldung.

    HinweisHinweis

    Die OSQLPASSWORD-Umgebungsvariable wurde aus Gründen der Abwärtskompatibilität beibehalten. Die SQLCMDPASSWORD-Umgebungsvariable hat Vorrang vor der OSQLPASSWORD-Umgebungsvariable. Dies bedeutet, dass sqlcmd und osql störungsfrei parallel verwendet werden können und alte Skripts weiterhin funktionsfähig sind.

    Wird die Option -P zusammen mit der Option -E verwendet, wird eine Fehlermeldung generiert.

    Werden nach der Option -P mehrere Argumente angegeben, wird eine Fehlermeldung generiert, und das Programm wird beendet.

  • -E trusted connection
    Verwendet eine vertrauenswürdige Verbindung anstelle eines Benutzernamens und eines Kennworts für die Anmeldung bei SQL Server. Standardmäßig wird von sqlcmd die vertrauenswürdige Verbindung verwendet, wenn -E nicht angegeben ist.

    Die Option -E ignoriert mögliche Umgebungsvariableneinstellungen für Benutzernamen und Kennwörter, z. B. SQLCMDPASSWORD. Wird die Option -E zusammen mit der Option -U oder -P verwendet, wird eine Fehlermeldung generiert.

  • -Nencrypt connection
    Diese Option wird vom Client verwendet, um eine verschlüsselte Verbindung anzufordern. Diese Option entspricht der ADO.NET-Option ENCRYPT = true.

  • -Ctrust the server certificate
    Diese Option wird vom Client verwendet, um ihn so zu konfigurieren, dass er dem Serverzertifikat ohne Überprüfung implizit vertraut. Diese Option entspricht der ADO.NET-Option TRUSTSERVERCERTIFICATE = true.

  • -z new password
    Kennwort ändern:

    sqlcmd -U someuser -P s0mep@ssword -z a_new_p@a$$w0rd

  • -Z new password and exit
    Kennwort ändern und beenden:

    sqlcmd -U someuser -P s0mep@ssword -Z a_new_p@a$$w0rd

  • -S [protocol:]server[**\instance_name][,**port]
    Gibt die SQL Server-Instanz an, mit der eine Verbindung hergestellt wird. Durch die Option wird die sqlcmd-Skriptvariable SQLCMDSERVER festgelegt.

    Geben Sie server an, um eine Verbindung mit der Standardinstanz von SQL Server auf diesem Servercomputer herzustellen. Geben Sie server[**\**instance_name] an, um eine Verbindung mit einer benannten Instanz von SQL Server auf diesem Servercomputer herzustellen. Wenn kein Servercomputer angegeben wird, stellt sqlcmd eine Verbindung mit der Standardinstanz von SQL Server auf dem lokalen Computer her. Diese Option ist erforderlich, wenn sqlcmd von einem Remotecomputer im Netzwerk ausgeführt wird.

    protocol kann tcp (TCP/IP), lpc (Shared Memory) oder np (Named Pipes) sein. Weitere Informationen zu Protokollen finden Sie unter Auswählen eines Netzwerkprotokolls.

    Wenn Sie server[**\**instance_name] beim Starten von sqlcmd nicht angeben, überprüft und verwendet SQL Server die SQLCMDSERVER-Umgebungsvariable.

    HinweisHinweis

    Die OSQLSERVER-Umgebungsvariable wurde aus Gründen der Abwärtskompatibilität beibehalten. Die SQLCMDSERVER-Umgebungsvariable hat Vorrang vor der OSQLSERVER-Umgebungsvariable. Dies bedeutet, dass sqlcmd und osql störungsfrei parallel verwendet werden können und alte Skripts weiterhin funktionsfähig sind.

  • -Hwksta_name
    Der Name einer Arbeitsstation. Durch diese Option wird die sqlcmd-Skriptvariable SQLCMDWORKSTATION festgelegt. Der Name der Arbeitsstation wird in der hostname-Spalte der sys.processes-Katalogsicht aufgeführt, und der Name kann mithilfe der gespeicherten Prozedur sp_who zurückgegeben werden. Wenn diese Option nicht angegeben ist, wird standardmäßig der Name des aktuellen Computers angenommen. Mithilfe dieses Namens können verschiedene sqlcmd-Sitzungen identifiziert werden.

  • -ddb_name
    Gibt beim Starten von sqlcmd eine USE db_name-Anweisung aus. Durch diese Option wird die sqlcmd-Skriptvariable SQLCMDDBNAME festgelegt. Hierdurch wird die Ausgangsdatenbank angegeben. Der Standardwert ist die Standarddatenbank-Eigenschaft der Anmelde-ID. Wenn die Datenbank nicht vorhanden ist, wird eine Fehlermeldung generiert, und sqlcmd wird beendet.

  • -llogintime_out
    Gibt die Anzahl von Sekunden an, nach der beim Herstellen einer Verbindung mit einem Server ein Timeout für eine sqlcmd-Anmeldung beim OLE DB-Anbieter eintritt. Durch diese Option wird die sqlcmd-Skriptvariable SQLCMDLOGINTIMEOUT festgelegt. Der Standardwert für das Timeout eines sqlcmd-Anmeldevorgangs ist acht Sekunden. Der Timeoutwert für den Anmeldungszeitraum muss eine Zahl zwischen 0 und 65534 sein. Wenn der angegebene Wert kein numerischer Wert ist oder außerhalb dieses Bereichs liegt, generiert sqlcmd eine Fehlermeldung. Bei einem Wert von 0 tritt nie ein Timeout ein.

  • -A dedicated admin connection
    Führt die Anmeldung bei SQL Server über eine dedizierte Administratorverbindung (Dedicated Administrator Connection, DAC) aus. Diese Verbindungsart wird verwendet, um Serverprobleme zu behandeln. Diese Option kann nur bei Servercomputern verwendet werden, die DAC unterstützen. Wenn DAC nicht verfügbar ist, generiert sqlcmd eine Fehlermeldung und wird dann beendet. Weitere Informationen zu DAC finden Sie unter Verwenden einer dedizierten Administratorverbindung.

  • Input/Output Options

  • -i input_file[***,***input_file2...]
    Identifiziert die Datei, die einen Batch mit SQL-Anweisungen oder gespeicherten Prozeduren enthält. Sie können mehrere Dateien angeben, die der Reihe nach gelesen und verarbeitet werden. Geben Sie keine Leerzeichen zwischen den Dateinamen ein. sqlcmdüberprüft zuerst, ob alle angegebenen Dateien vorhanden sind. Wenn eine oder mehrere Dateien nicht vorhanden sind, wird sqlcmd beendet. Die Optionen -i und -Q/-q schließen sich gegenseitig aus.

    Beispiele für Pfade:

    -i C:\<dateiname>

    -i \\<Server>\<Freigabe$>\<Dateiname>

    -i "C:\Ein Ordner\<Dateiname>"

    Dateipfade, die Leerzeichen enthalten, müssen in Anführungszeichen eingeschlossen werden.

    Diese Option kann mehrmals verwendet werden: -i input_file -i I input_file.

  • -ooutput_file
    Identifiziert die Datei, in die die Ausgabe von sqlcmd geschrieben wird.

    Wird -u angegeben, wird die mit output_file angegebene Datei im Unicode-Format gespeichert. Wenn der Dateiname ungültig ist, generiert sqlcmd eine Fehlermeldung und wird dann beendet. sqlcmd bietet keine Unterstützung für das gleichzeitige Schreiben mehrerer sqlcmd-Prozesse in dieselbe Datei. In diesem Fall wäre die Dateiausgabe beschädigt oder fehlerhaft. Weitere Informationen zu Dateiformaten finden Sie in der Beschreibung der Option -f. Falls sie noch nicht vorhanden ist, wird die Datei erstellt. Eine Datei mit dem gleichen Namen aus einer früheren sqlcmd-Sitzung wird überschrieben. Bei der hier angegebenen Datei handelt es sich nicht um die stdout-Datei. Wenn eine stdout-Datei angegeben ist, wird diese Datei nicht verwendet.

    Beispiele für Pfade:

    -o C:\<dateiname>

    -o \\<Server>\<Freigabe$>\<Dateiname>

    **-o "**C:\Ein Ordner\<Dateiname>"

    Dateipfade, die Leerzeichen enthalten, müssen in Anführungszeichen eingeschlossen werden.

  • -f < codepage > | i: < codepage > [ <, o: < codepage > ]
    Gibt die Eingabe- und Ausgabecodepages an. Die Codepagenummer ist ein numerischer Wert, der eine installierte Windows-Codepage angibt. Weitere Informationen finden Sie unter Sortierungseinstellungen im Setup-Programm.

    Regeln zum Konvertieren von Codepages:

    • Wenn keine Codepages angegeben sind, verwendet sqlcmd die aktuelle Codepage sowohl für Eingabe- als auch für Ausgabedateien, sofern es sich bei der Eingabedatei nicht um eine Unicode-Datei handelt, da in diesem Fall keine Konvertierung erforderlich ist.

    • sqlcmd erkennt Unicode-Eingabedateien des Formats Big-Endian und Little-Endian automatisch. Wenn die Option -u angegeben wurde, handelt es sich bei der Ausgabe stets um Unicode-Dateien des Formats Little-Endian.

    • Wenn keine Ausgabedatei angegeben wurde, handelt es sich bei der Ausgabe-Codepage um die Codepage der Konsole. Auf diese Weise wird die Ausgabe richtig auf der Konsole angezeigt.

    • Wenn mehrere Eingabedateien angegeben wurden, wird davon ausgegangen, dass sie dieselbe Codepage verwenden. Unicode- und Nicht-Unicode-Eingabedateien können gemischt verwendet werden.

    Geben Sie an der Eingabeaufforderung chcp ein, um die Codepage von Cmd.exe zu überprüfen.

  • -u unicode output
    Gibt an, dass output_file unabhängig vom Format von input_file im Unicode-Format gespeichert wird.

  • -r[ 0 | 1] msgs to stderr
    Leitet die Ausgabe der Fehlermeldung auf den Bildschirm um (stderr). Wenn Sie keinen Parameter bzw. wenn Sie 0 angeben, werden nur Fehlermeldungen mit dem Schweregrad 11 oder höher umgeleitet. Wenn Sie 1 angeben, wird die gesamte Fehlermeldungsausgabe (einschließlich der Ausgabe von PRINT) umgeleitet. Dies hat keine Wirkung, wenn Sie die Option -o verwenden. Standardmäßig werden Meldungen an stdout gesendet.

  • -R use client regional settings
    Bewirkt, dass sqlcmd aus SQL Server abgerufene numerische Spalten sowie Währungs-, Datums- und Zeitspalten basierend auf dem Gebietsschema des Clients lokalisiert. Standardmäßig werden diese Spalten entsprechend den regionalen Einstellungen des Servers angezeigt.

  • Abfrageausführungsoptionen

  • -q" cmdline query "
    Führt eine Abfrage aus, wenn sqlcmd gestartet wird, beendet sqlcmd jedoch nicht, nachdem die Ausführung der Abfrage abgeschlossen ist. Es können mehrere durch Semikolons getrennte Abfragen ausgeführt werden. Schließen Sie die Abfrage in Anführungszeichen ein, wie im folgenden Beispiel gezeigt wird.

    Geben Sie Folgendes an der Eingabeaufforderung ein:

    sqlcmd -d AdventureWorks2008R2 -q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"

    sqlcmd -d AdventureWorks2008R2 -q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"

    Wichtiger HinweisWichtig

    Verwenden Sie nicht das Abschlusszeichen GO in der Abfrage.

    Wenn -b zusammen mit dieser Option angegeben wird, wird sqlcmd bei einem Fehler beendet. -b wird weiter unten in diesem Thema beschrieben.

  • **-Q"**cmdline query " and exit
    Führt eine Abfrage aus, wenn sqlcmd gestartet wird, und beendet sqlcmd unmittelbar im Anschluss. Es können mehrere durch Semikolons getrennte Abfragen ausgeführt werden.

    Schließen Sie die Abfrage in Anführungszeichen ein, wie im folgenden Beispiel gezeigt wird.

    Geben Sie Folgendes an der Eingabeaufforderung ein:

    sqlcmd -d AdventureWorks2008R2 -Q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"

    sqlcmd -d AdventureWorks2008R2 -Q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"

    Wichtiger HinweisWichtig

    Verwenden Sie nicht das Abschlusszeichen GO in der Abfrage.

    Wenn -b zusammen mit dieser Option angegeben wird, wird sqlcmd bei einem Fehler beendet. -b wird weiter unten in diesem Thema beschrieben.

  • -e echo input
    Schreibt Eingabeskripts in das Standardausgabegerät (stdout).

  • -I enable Quoted Identifiers
    Legt die SET QUOTED_IDENTIFIER-Verbindungsoption auf ON fest. Die Standardeinstellung ist OFF. Weitere Informationen finden Sie unter SET QUOTED_IDENTIFIER (Transact-SQL).

  • -tquerytime_out
    Gibt die Anzahl von Sekunden an, nach der für einen Befehl (oder eine SQL-Anweisung) ein Timeout eintritt. Durch diese Option wird die sqlcmd-Skriptvariable SQLCMDSTATTIMEOUT festgelegt. Wenn für time_out kein Wert angegeben wird, tritt für den Befehl kein Timeout ein. querytime_out muss eine Zahl zwischen 1 und 65535 sein. Wenn der angegebene Wert kein numerischer Wert ist oder außerhalb dieses Bereichs liegt, generiert sqlcmd eine Fehlermeldung.

    HinweisHinweis

    Der tatsächliche Timeoutwert kann einige Sekunden von dem für time_out angegebenen Wert abweichen.

  • -vvar*=value[ var=*value...]
    Erstellt eine sqlcmd-Skriptvariable, die in einem sqlcmd-Skript verwendet werden kann. Setzen Sie den Wert in Anführungszeichen, falls er Leerzeichen enthält. Sie können mehrere Werte mit var="values" angeben. Wenn einer der angegebenen Werte fehlerhaft ist, generiert sqlcmd eine Fehlermeldung und wird beendet.

    sqlcmd -v MyVar1=something MyVar2="some thing"

    sqlcmd -v MyVar1=something -v MyVar2="some thing"

  • -x disable variable substitution
    Bewirkt, dass sqlcmd Skriptvariablen ignoriert. Dies ist nützlich, wenn ein Skript mehrere INSERT-Anweisungen enthält, die Zeichenfolgen im selben Format wie reguläre Variablen enthalten können, z. B. $(variable_name).

  • Formatierungsoptionen

  • -hheaders
    Gibt die Anzahl von Zeilen an, die zwischen den Spaltenüberschriften ausgegeben werden. Standardmäßig werden die Überschriften für jedes Resultset der Abfrage einmal ausgegeben. Durch diese Option wird die sqlcmd-Skriptvariable SQLCMDDBNAME festgelegt. Mit -1 können Sie angeben, dass keine Überschriften ausgegeben werden sollen. Ein ungültiger Wert bewirkt, dass sqlcmd eine Fehlermeldung generiert und dann beendet wird.

  • -scol_separator
    Gibt das Spaltentrennzeichen an. Der Standardwert ist ein Leerzeichen. Durch diese Option wird die sqlcmd-Skriptvariable SQLCMDCOLSEP festgelegt. Zeichen, die für das Betriebssystem eine besondere Bedeutung haben, z. B. das kaufmännische Und-Zeichen (&) oder das Semikolon (;), müssen in Anführungszeichen (") eingeschlossen werden. Das Spaltentrennzeichen kann ein beliebiges 8-Bit-Zeichen sein.

  • -wcolumn_width
    Gibt die Bildschirmbreite für die Ausgabe an. Durch diese Option wird die sqlcmd-Skriptvariable SQLCMDCOLWIDTH festgelegt. Die Spaltenbreite muss eine Zahl größer als 8 und kleiner als 65536 sein. Wenn die angegebene Spaltenbreite außerhalb dieses Bereichs liegt, generiert sqlcmd eine Fehlermeldung. Die Standardbreite beträgt 80 Zeichen. Wenn eine Ausgabezeile die angegebene Spaltenbreite überschreitet, wird sie in die nächste Zeile umbrochen.

  • -W remove trailing spaces
    Mit dieser Option werden nachfolgende Leerzeichen aus einer Spalte entfernt. Verwenden Sie diese Option zusammen mit der Option -s, um Daten vorzubereiten, die in eine andere Anwendung exportiert werden sollen. Diese Option kann nicht mit der Option -y oder -Y verwendet werden.

  • -k[ 1 | 2 ] remove[replace] control characters
    Entfernt alle Steuerzeichen aus der Ausgabe, z. B. Tabstoppzeichen und Neue-Zeile-Zeichen. Hierdurch bleibt die Spaltenformatierung erhalten, wenn Daten zurückgegeben werden. Wenn 1 angegeben wird, werden die Steuerzeichen durch ein einzelnes Leerzeichen ersetzt. Wenn 2 angegeben wird, werden aufeinanderfolgende Steuerzeichen durch ein einzelnes Leerzeichen ersetzt.

  • -ydisplay_width
    Legt die sqlcmd-Skriptvariable SQLCMDMAXFIXEDTYPEWIDTH fest. Sie begrenzt die Anzahl von Zeichen, die für die großen Datentypen variabler Länge zurückgegeben werden:

    • varchar(max)

    • nvarchar(max)

    • varbinary(max)

    • xml

    • UDT (user-defined data types)

    • text

    • ntext

    • image

    HinweisHinweis

    UDTs können je nach Implementierung eine feste Länge aufweisen. Wenn die Länge eines UDT mit fester Länge den Wert für display_width unterschreitet, hat dies keinen Einfluss auf den Wert des zurückgegebenen UDT. Wenn die Länge den Wert für display_width jedoch überschreitet, wird die Ausgabe abgeschnitten.

    Wird für display_width der Wert 0 angegeben, wird die Ausgabe abgeschnitten, sobald 1 MB erreicht wurde. Sie können den :XML ON-Befehl verwenden, um das Abschneiden der Ausgabe zu verhindern. Der :XML ON-Befehl wird weiter unten in diesem Thema beschrieben.

    Wichtiger HinweisWichtig

    Bei der Verwendung der Option -y 0 ist besondere Vorsicht geboten, da sie je nach Größe der zurückgegebenen Daten zu schwerwiegenden Leistungsproblemen auf dem Server und im Netzwerk führen kann.

  • -Ydisplay_width
    Legt die sqlcmd-Skriptvariable SQLCMDMAXVARTYPEWIDTH fest. Der Standardwert ist 256. Er begrenzt die Anzahl zurückgegebener Zeichen für die folgenden Datentypen:

    • char

    • nchar

    • varchar(n), wobei 1<n<8000

    • nvarchar(n), wobei 1<n<4000

    • sql_variant

  • Optionen für die Fehlerberichterstellung

  • -b on error batch abort
    Gibt an, dass sqlcmd beendet und ein DOS ERRORLEVEL-Wert zurückgegeben wird, wenn ein Fehler auftritt. Für die DOS ERRORLEVEL-Variable wird der Wert 1 zurückgegeben, wenn der Schweregrad der SQL Server-Fehlermeldung größer als 10 ist. Andernfalls wird der Wert 0 zurückgegeben. Wenn zusätzlich zu -b die Option -V festgelegt wurde, meldet sqlcmd keinen Fehler, wenn der Schweregrad kleiner ist als die mit -V festgelegten Werte. Mit Eingabeaufforderungs-Batchdateien kann der Wert von ERRORLEVEL getestet und der Fehler entsprechend behandelt werden. sqlcmd meldet keine Fehler mit dem Schweregrad 10 (Informationsmeldungen).

    Wenn das sqlcmd-Skript einen falschen Kommentar bzw. einen Syntaxfehler enthält oder eine Skriptvariable fehlt, wird der ERRORLEVEL-Wert 1 zurückgegeben.

  • -V severitylevel
    Steuert den Schweregrad, der zur Festlegung der ERRORLEVEL-Variable verwendet wird. Fehlermeldungen mit einem Schweregrad, der kleiner oder gleich diesem Wert ist, legen ERRORLEVEL fest. Werte kleiner 0 werden als 0 zurückgegeben. Batch- und CMD-Dateien können verwendet werden, um den Wert der ERRORLEVEL-Variable zu testen.

  • -merror_level
    Steuert, welche Fehlermeldungen an stdout gesendet werden. Fehlermeldungen mit einem Schweregrad, der kleiner oder gleich diesem Wert ist, werden gesendet. Wenn dieser Wert auf -1 festgelegt wird, werden alle Meldungen gesendet, einschließlich der Informationsmeldungen. Es sind keine Leerzeichen zwischen -m und -1 zulässig. Beispiel: -m-1 ist gültig, -m-1 hingegen nicht.

    Mit dieser Option wird außerdem die sqlcmd-Skriptvariable SQLCMDERRORLEVEL festgelegt. Diese Variable hat den Standardwert 0.

  • Sonstige Optionen

  • -apacket_size
    Fordert ein Paket einer anderen Größe an. Durch diese Option wird die sqlcmd-Skriptvariable SQLCMDPACKETSIZE festgelegt. packet_size muss ein Wert zwischen 512 und 32767 sein. Der Standardwert ist 4096. Ein höherer Wert für die Paketgröße kann das Leistungsverhalten beim Ausführen von Skripts verbessern, die zahlreiche SQL-Anweisungen zwischen GO-Befehlen aufweisen. Sie können eine größere Paketgröße anfordern. Wird die Anforderung jedoch verweigert, verwendet sqlcmd die Standardeinstellung des Servers für die Paketgröße.

  • -ccmd_end
    Gibt das Batchabschlusszeichen an. Standardmäßig werden Befehle abgeschlossen und an SQL Server gesendet, indem das Wort "GO" in eine eigene Zeile eingegeben wird. Wenn Sie das Batchabschlusszeichen neu festlegen, dürfen Sie keine für Transact-SQL reservierten Schlüsselwörter oder Zeichen verwenden, die eine spezielle Bedeutung für das Betriebssystem haben, und zwar auch dann nicht, wenn vor dem Wort bzw. Zeichen ein umgekehrter Schrägstrich steht.

  • -L [ c ] list servers[clean output]
    Listet die lokal konfigurierten Servercomputer sowie die Namen der Servercomputer auf, die Broadcastnachrichten über das Netzwerk senden. Dieser Parameter kann nicht in Verbindung mit anderen Parametern verwendet werden. Es können maximal 3.000 Servercomputer aufgelistet werden. Wenn die Serverliste aufgrund der Puffergröße abgeschnitten wurde, wird eine Warnmeldung angezeigt.

    HinweisHinweis

    Aufgrund der Beschaffenheit des Broadcastings in Netzwerken ist es möglich, dass sqlcmd nicht von allen Servern rechtzeitig eine Antwort empfängt. Daher kann die Liste der zurückgegebenen Server mit jedem Aufruf dieser Option variieren.

    Wenn der optionale Parameter c angegeben ist, wird die Ausgabe ohne die Kopfzeile Server: angezeigt. Jede Serverzeile wird ohne führende Leerzeichen ausgegeben. Dies wird als einfache Ausgabe bezeichnet. Durch die einfache Ausgabe wird die Verarbeitungsleistung von Skriptsprachen verbessert.

  • -p[ 1 ] print statistics[colon format]
    Gibt Leistungsstatistiken für jedes Resultset aus. Folgende Ausgabe ist ein Beispiel für das Format von Leistungsstatistiken:

    Network packet size (bytes): n

    x xact[s]:

    Clock Time (ms.): total t1 avg t2 (t3 xacts per sec.)

    Erläuterungen:

    x = Anzahl von Transaktionen, die von SQL Server verarbeitet werden.

    t1 = Gesamtdauer aller Transaktionen.

    t2 = Durchschnittliche Dauer einer einzelnen Transaktion.

    t3 = Durchschnittliche Anzahl von Transaktionen pro Sekunde.

    Alle Zeitangaben erfolgen in Millisekunden.

    Wird der optionale Parameter 1 angegeben, wird die Statistik im durch Doppelpunkte getrennten Format ausgegeben, das problemlos in eine Kalkulationstabelle importiert oder von einem Skript verarbeitet werden kann.

    Wird für den optionalen Parameter ein anderer Wert als 1 angegeben, wird ein Fehler generiert, und sqlcmd wird beendet.

  • -X [ 1 ] disable commands, startup script, enviroment variables [and exit]
    Deaktiviert Befehle, die die Systemsicherheit gefährden können, wenn sqlcmd über eine Batchdatei ausgeführt wird. Die deaktivierten Befehle werden weiterhin erkannt. sqlcmd gibt eine Warnmeldung aus und setzt die Ausführung fort. Wenn der optionale Parameter 1 angegeben wird, generiert sqlcmd eine Fehlermeldung und wird dann beendet. Die folgenden Befehle werden deaktiviert, wenn die Option -X verwendet wird:

    • ED

    • **!!**command

    Die Angabe der Option -X verhindert, dass Umgebungsvariablen an sqlcmd übergeben werden. Sie verhindert darüber hinaus die Ausführung des Startskripts, das mithilfe der SQLCMDINI-Skriptvariable angegeben wurde. Weitere Informationen zu sqlcmd-Skriptvariablen finden Sie unter Verwenden von sqlcmd mit Skriptvariablen.

  • -? show syntax summary
    Zeigt eine Syntaxzusammenfassung der sqlcmd-Optionen an.

Hinweise

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 Verwendung des Hilfsprogramms "sqlcmd".

HinweisHinweis

Die Optionen -L, -Q, -Z oder -i bewirken, dass sqlcmd nach der Ausführung beendet wird.

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.

Rangfolge der Variablen (vom niedrigsten bis zum höchsten Rang)

  1. Umgebungsvariablen auf Systemebene

  2. Umgebungsvariablen auf Benutzerebene

  3. Vor der Ausführung von sqlcmd an der Eingabeaufforderung festgelegte Befehlsshell (SET X=Y)

  4. sqlcmd-v X=Y

  5. :Setvar X Y

HinweisHinweis

Öffnen Sie die Systemsteuerung, klicken Sie auf System und anschließend auf die Registerkarte Erweitert, um die Umgebungsvariablen anzuzeigen.

sqlcmd-Skriptvariablen

Variable

Damit verbundene Schalter

R/W

Default

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 während der Programminitialisierung nur einmal 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.

sqlcmd-Befehle

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.

    Wichtiger HinweisWichtig

    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ß-/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.

  • Bearbeitungsbefehle

  • [:] ED
    Startet den Text-Editor. Mit diesem Editor kann der aktuelle Transact-SQL-Batch oder der zuletzt ausgeführte Batch bearbeitet werden. Zur Bearbeitung des zuletzt ausgeführten Batches muss der ED-Befehl unmittelbar nach Abschluss der Ausführung des letzten Batches eingegeben werden.

    Der Text-Editor wird durch die SQLCMDEDITOR-Umgebungsvariable definiert. Der Standardeditor ist 'Edit'. Sie können den Editor ändern, indem Sie die SQLCMDEDITOR-Umgebungsvariable festlegen. Wenn Sie beispielsweise den Microsoft-Editor als Editor festlegen möchten, müssen Sie Folgendes eingeben:

    SET SQLCMDEDITOR=notepad

  • [:] RESET
    Löscht den Anweisungscache.

  • :List
    Gibt den Inhalt des Anweisungscaches aus.

  • Variablen

  • :Setvar <var> [ "value" ]
    Definiert sqlcmd-Skriptvariablen. Skriptvariablen haben das folgende Format: $(VARNAME).

    Bei Variablennamen wird die Groß- und Kleinschreibung nicht beachtet.

    Skriptvariablen können folgendermaßen festgelegt werden:

    • Implizit – mithilfe einer Befehlszeilenoption. So wird z. B. mit der Option -l die sqlcmd-Variable SQLCMDLOGINTIMEOUT festgelegt.

    • Explizit – mithilfe des :Setvar-Befehls.

    • Durch die Definition einer Umgebungsvariable vor der Ausführung von sqlcmd.

    HinweisHinweis

    Die Option -X verhindert, dass Umgebungsvariablen an sqlcmd übergeben werden.

    Wenn eine Variable, die mithilfe von :Setvar definiert wurde, denselben Namen wie eine Umgebungsvariable aufweist, hat die mit :Setvar definierte Variable Vorrang.

    Variablennamen dürfen keine Leerzeichen enthalten.

    Variablennamen können nicht dieselbe Form wie ein Variablenausdruck, z. B. $(var), haben.

    Wenn der Zeichenfolgenwert der Skriptvariablen Leerzeichen enthält, müssen Sie den Wert in Anführungszeichen einschließen. Wenn für eine Skriptvariable kein Wert angegeben wird, wird die Skriptvariable ausgelassen.

  • :Listvar
    Zeigt eine Liste der zurzeit festgelegten Skriptvariablen an.

    HinweisHinweis

    Es werden nur Skriptvariablen angezeigt, die von sqlcmd oder mithilfe des :Setvar-Befehls festgelegt wurden.

  • Ausgabebefehle

  • :Error **<filename>|STDERR|STDOUT
    Leitet die gesamte Fehlerausgabe in die mit file name angegebene Datei, in stderr oder in stdout um. Der Befehl Error kann mehrmals in einem Skript verwendet werden. Die Fehlerausgabe wird standardmäßig an stderr gesendet.

    • file name
      Erstellt und öffnet eine Datei, in die die Ausgabe geschrieben wird. Wenn die Datei bereits vorhanden ist, wird sie auf 0 Bytes gekürzt. Wenn der Zugriff auf die Datei aufgrund unzureichender Berechtigungen oder anderer Ursachen nicht möglich ist, wird die Ausgabe nicht umgeleitet, sondern an das zuletzt angegebene Ziel oder an das Standardziel gesendet.

    • STDERR
      Leitet die Fehlerausgabe in den stderr-Datenstrom. Wenn dieser Datenstrom umgeleitet wurde, wird die Fehlerausgabe von dem Ziel empfangen, zu dem der Datenstrom umgeleitet wurde.

    • STDOUT
      Leitet die Fehlerausgabe in den stdout-Datenstrom. Wenn dieser Datenstrom umgeleitet wurde, wird die Fehlerausgabe von dem Ziel empfangen, zu dem der Datenstrom umgeleitet wurde.

  • :Out <filename>| STDERR| STDOUT
    Erstellt und leitet alle Abfrageergebnisse in der bzw. an die durch file name angegebene Datei, an stderr oder stdout um. Standardmäßig wird die Ausgabe an stdout gesendet. Wenn die Datei bereits vorhanden ist, wird sie auf 0 Byte gekürzt. Der Befehl Out kann mehrmals in einem Skript verwendet werden.

  • :Perftrace <filename>| STDERR| STDOUT
    Erstellt und leitet alle Informationen zur Leistungsnachverfolgung in der bzw. an die durch file name angegebene Datei, an stderr oder stdout um. Standardmäßig wird die Ausgabe zur Leistungsnachverfolgung an stdout gesendet. Wenn die Datei bereits vorhanden ist, wird sie auf 0 Byte gekürzt. Der Befehl Perftrace kann mehrmals in einem Skript verwendet werden.

  • Befehle zur Ausführungssteuerung

  • :On Error[ exit | ignore]
    Legt die Aktion fest, die ausgeführt werden soll, wenn während der Skript- oder Batchausführung ein Fehler auftritt.

    Bei Verwendung der Option exitwird sqlcmd mit dem entsprechenden Fehlerwert beendet.

    Bei Verwendung der Option ignore ignoriert sqlcmd den Fehler, und die Batch- oder Skriptausführung wird fortgesetzt. Standardmäßig wird eine Fehlermeldung ausgegeben.

  • [:] QUIT
    Bewirkt, dass sqlcmd beendet wird.

  • [:] EXIT[ (statement) ]
    Gibt Ihnen die Möglichkeit, das Ergebnis einer SELECT-Anweisung als Rückgabewert von sqlcmd zu verwenden. Wenn das Ergebnis numerisch ist, wird die erste Spalte der letzten Ergebniszeile in eine 4 Byte lange ganze Zahl (Long) konvertiert. MS-DOS übergibt das niedrige Byte an den übergeordneten Prozess oder an die Fehlerebene des Betriebssystems. Windows 200x übergibt die gesamte 4 Bytes lange ganze Zahl. Die Syntax ist:

    :EXIT(query)

    Beispiel:

    :EXIT(SELECT @@ROWCOUNT)

    Sie können den EXIT-Parameter auch als Teil einer Batchdatei einschließen. Geben Sie an der Eingabeaufforderung z. B. Folgendes ein:

    sqlcmd -Q "EXIT(SELECT COUNT(*) FROM '%1')"

    Das Hilfsprogramm sqlcmd sendet alle zwischen den Klammern () stehenden Angaben an den Server. Wenn eine gespeicherte Systemprozedur eine Menge auswählt und einen Wert zurückgibt, wird nur die Auswahl zurückgegeben. Eine EXIT**(** )-Anweisung ohne Angabe zwischen den Klammern führt alle im Batch vorhergehenden Anweisungen aus und beendet das Hilfsprogramm dann ohne Rückgabewert.

    Wird eine fehlerhafte Abfrage angegeben, wird sqlcmd beendet, ohne dass ein Wert zurückgegeben wird.

    Die folgende Liste enthält eine Aufstellung von EXIT-Formaten:

    • :EXIT

    Führt den Batch nicht aus, beendet das Hilfsprogramm sofort und gibt keinen Wert zurück.

    • :EXIT( )

    Führt den Batch aus, beendet dann das Hilfsprogramm und gibt keinen Wert zurück.

    • :EXIT(query)

    Führt den Batch mit der darin enthaltenen Abfrage aus und beendet dann das Hilfsprogramm, nachdem die Ergebnisse der Abfrage zurückgegeben wurden.

    Wird RAISERROR in einem sqlcmd-Skript verwendet und der Status 127 ausgelöst, wird sqlcmd beendet und die entsprechende Meldungs-ID an den Client zurückgegeben. Beispiel:

    RAISERROR(50001, 10, 127)

    Dieser Fehler bewirkt, dass das sqlcmd-Skript beendet und die Meldungs-ID 50001 an den Client zurückgegeben wird.

    Die Rückgabewerte -1 bis -99 sind für SQL Server reserviert. sqlcmd definiert die folgenden zusätzlichen Rückgabewerte:

    Rückgabewerte

    Beschreibung

    -100

    Vor dem Auswählen des Rückgabewerts ist ein Fehler aufgetreten.

    -101

    Beim Auswählen eines Rückgabewerts wurden keine Zeilen gefunden.

    -102

    Beim Auswählen des Rückgabewerts ist ein Konvertierungsfehler aufgetreten.

  • GO [count]
    GO signalisiert sowohl das Ende eines Batches als auch die Ausführung aller zwischengespeicherten Transact-SQL-Anweisungen. Wenn ein Wert für count angegeben wird, werden die zwischengespeicherten Anweisungen so oft, wie durch count angegeben, in Form eines einzigen Batches ausgeführt.

  • Sonstige Befehle

  • :r <filename>
    Analysiert weitere Transact-SQL-Anweisungen und sqlcmd-Befehle aus der mit <filename>* *angegebenen Datei und lädt sie in den Anweisungscache.

    Wenn die Datei Transact-SQL-Anweisungen enthält, die nicht von GO gefolgt sind, müssen Sie GO in der Zeile eingeben, die auf :r folgt.

    HinweisHinweis

    <filename> wird relativ zum Startverzeichnis gelesen, in dem sqlcmd ausgeführt wurde.

    Die Datei wird gelesen und ausgeführt, nachdem ein Batchabschlusszeichen gefunden wurde. Sie können den Befehl :r mehrmals verwenden. Die Datei kann beliebige sqlcmd-Befehle enthalten, einschließlich des Batchabschlusszeichens GO.

    HinweisHinweis

    Die im interaktiven Modus angezeigte Zeilenanzahl wird für jeden gefundenen :r-Befehl um 1 erhöht. Der :r-Befehl wird in der Ausgabe des Listenbefehls angezeigt.

  • :Serverlist
    Listet die lokal konfigurierten Server sowie die Namen der Server auf, die Nachrichten über das Netzwerk senden.

  • :Connect server_name[**\**instance_name] [-l timeout] [-U user_name [-P password]]
    Stellt eine Verbindung mit einer Instanz von SQL Server her. Schließt außerdem die aktuelle Verbindung.

    Timeoutoptionen:

    0

    unbegrenzte Wartezeit

    n>0

    Wartezeit beträgt n Sekunden

    Die SQLCMDSERVER-Skriptvariable spiegelt die zurzeit aktive Verbindung wider.

    Wenn timeout nicht angegeben wird, gilt standardmäßig der Wert der SQLCMDLOGINTIMEOUT-Variablen.

    Wenn nur user_nameangegeben wird (entweder als Option oder als Umgebungsvariable), wird der Benutzer zur Eingabe eines Kennworts aufgefordert. Dies trifft nicht zu, wenn die Umgebungsvariable SQLCMDUSER oder SQLCMDPASSWORD festgelegt wurde. Wenn weder Optionen noch Umgebungsvariablen angegeben werden, wird der Windows-Authentifizierungsmodus für die Anmeldung verwendet. Wenn z. B. mithilfe integrierter Sicherheit eine Verbindung mit der Instanz instance1 auf dem Computer mit SQL Server (myserver) hergestellt werden soll, würden Sie Folgendes eingeben:

    :connect myserver\instance1

    Wenn mithilfe von Skriptvariablen eine Verbindung mit der Standardinstanz auf myserver hergestellt werden soll, würden Sie Folgendes eingeben:

    :setvar myusername test

    :setvar myservername myserver

    :connect $(myservername) $(myusername)

  • [:] !!< command>
    Führt Betriebssystembefehle aus. Zum Ausführen eines Betriebssystembefehls geben Sie zwei Ausrufezeichen (!!) gefolgt von dem Betriebssystembefehl in eine neue Zeile ein. Beispiel:

    :!! Dir

    HinweisHinweis

    Der Befehl wird auf dem Computer ausgeführt, auf dem sqlcmd ausgeführt wird.

  • :XML [ON | OFF]
    Weitere Informationen finden Sie unter "XML-Ausgabeformat" weiter unten in diesem Thema.

  • :Help
    Listet die sqlcmd-Befehle zusammen mit einer kurzen Beschreibung jedes Befehls auf.

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 die Verwendung 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 von sqlcmd auf einem lokalen Computer aufgerufen wird und die Datei einen Laufwerksdateipfad wie :out c:\OutputFile.txt enthält, 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_Verzeichnis\<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 AdventureWorks2008R2;

GO

Wenn Sie die EINGABETASTE drücken, wird die folgende Informationsmeldung ausgegeben: "Der Datenbankkontext wurde auf 'AdventureWorks2008R2' geändert."

Ausgabeformat von Transact-SQL-Abfragen

sqlcmd gibt zuerst einen Spaltenheader aus, der 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 AdventureWorks2008R2;

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 beim 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.

HinweisHinweis

sqlcmd gibt Fehlermeldungen im üblichen Format zurück. Beachten Sie, dass die Fehlermeldungen auch im XML-Textstream im XML-Format ausgegeben werden. Bei Verwendung von :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.

HinweisHinweis

Der :XML-Befehl unterstützt die SET STATISTICS XML-Anweisung nicht.

Bewährte Methoden für die Verwendung von sqlcmd

Mit den folgenden Methoden können Sie die Sicherheit und Effizienz 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 zum Verbessern der Leistung möglichst viele Aufgaben in einer einzigen sqlcmd-Sitzung durch (nicht in einer Reihe verschiedener Sitzungen).

  • Legen Sie für Batch- oder Abfragetimeouts Werte fest, die höher sind als die erwartete Ausführungsdauer.