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.
-
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). $(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 Umgebungsvariablen vor der Ausführung von sqlcmd.
Hinweis: |
|---|
|
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, ist die mit :Setvar definierte Variable vorrangig.
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 die Liste der zurzeit festgelegten Skriptvariablen an.
Hinweis: |
|---|
|
Es werden nur solche 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 ein Fehler während der Skript- oder Batchausführung auftritt.
Wenn die Option exit verwendet wird, wird sqlcmd mit dem entsprechenden Fehlerwert beendet.
Wenn die Option ignore verwendet wird, ignoriert sqlcmd den Fehler und setzt die Batch- oder Skriptausführung fort. 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. Die erste Spalte der ersten Ergebniszeile wird 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 Dienstprogramm 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 Dienstprogramm dann ohne Rückgabewert.
Wird eine fehlerhafte Abfrage angegeben, wird sqlcmd beendet, ohne dass ein Wert zurückgegeben wird.
Folgende Liste enthält eine Aufstellung von EXIT-Formaten:
Führt den Batch nicht aus, beendet das Dienstprogramm sofort und gibt keinen Wert zurück.
Führt den Batch aus, beendet dann das Dienstprogramm und gibt keinen Wert zurück.
Führt den Batch mit der darin enthaltenen Abfrage aus und beendet dann das Dienstprogramm, 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 :r folgt.
Hinweis: |
|---|
|
<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.
Hinweis: |
|---|
|
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_name angegeben 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
Hinweis: |
|---|
|
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 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_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 AdventureWorks;
GO
Wenn Sie die EINGABETASTE drücken, wird die folgende Informationsmeldung ausgegeben: "Der Datenbankkontext wurde auf 'AdventureWorks' 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 AdventureWorks;
SELECT TOP (2) ContactID, FirstName, LastName
FROM Person.Contact;
GO
Wenn Sie die EINGABETASTE drücken, wird das folgende Resultset zurückgegeben.
ContactID FirstName LastName
----------- ------------ ----------
1 Syed Abbas
2 Catherine Abel
(2 row(s) affected)
Obwohl die ContactID-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 Format XML erwarten. :XML ON.
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. :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.
|