Freigeben über


Bearbeiten von SQLCMD-Skripts im Transact-SQL-Editor

Beim Schreiben oder Bearbeiten von Skripts im Transact-SQL-Editor kann eine Mischung von Transact-SQL- und SQLCMD-Befehlen verwendet werden, wenn Sie zuvor den SQLCMD-Modus aktivieren.Weitere Informationen finden Sie unter Gewusst wie: Aktivieren des SQLCMD-Modus im Transact-SQL-Editor.

Schreiben und Bearbeiten von SQLCMD-Skripts

Wenn Sie in einem Skript sowohl SQLCMD- als auch Transact-SQL-Befehle verwenden möchten, müssen Sie sicherstellen, dass das Skript den folgenden Anforderungen entspricht:

  • SQLCMD-Befehle müssen als erste Anweisung in einer Zeile angegeben werden.

  • Pro Zeile ist nur ein SQLCMD-Befehl zulässig.

  • SQLCMD-Befehlen können Kommentare oder Leerzeichen vorangestellt werden.

  • Bei einzeiligen Kommentaren werden zwei Bindestriche (--) als Kommentarzeichen verwendet, die am Anfang einer Zeile stehen müssen.Kommentarzeichen verhindern, dass SQLCMD-Befehle ausgeführt werden.

  • Vor jedem SQLCMD-Befehl muss am Anfang einer Zeile ein Doppelpunkt eingefügt werden, um den Befehl eindeutig von Transact-SQL-Befehlen zu unterscheiden.Die einzigen Ausnahmen sind die Befehle exit und !!, bei denen Doppelpunkte optional sind.

  • Sie können Umgebungsvariablen und als Teil eines SQLCMD-Skripts definierte Variablen verwenden, aber keine integrierten SQLCMD-Variablen.

Unterstützte SQLCMD-Syntax

Die folgenden Befehle können verwendet werden:

  • :r Dateiname
    Analysiert zusätzliche Transact-SQL-Anweisungen und SQLCMD-Befehle aus der mit Dateiname angegebenen Datei und schreibt das Ergebnis in den Anweisungscache. Dateiname wird relativ zum Startverzeichnis für Visual Studio gelesen.Die Datei wird gelesen und ausgeführt, nachdem ein Batchabschlusszeichen gefunden wurde.Sie können den :r-Befehl mehrmals verwenden.Die Datei kann beliebige SQLCMD-Befehle enthalten, einschließlich des unter "Optionen" (Menü "Extras") definierten Batchabschlusszeichens.:r kann in einem Skript vor oder nach der Bereitstellung verwendet werden, um andere Skripts einzuschließen.

  • :setvar Variablenwert
    Definiert Skriptvariablen.Skriptvariablen haben das folgende Format: $(Variable).Bei Variablennamen wird die Groß- und Kleinschreibung nicht beachtet.Wenn eine mit :Setvar definierte Variable denselben Namen wie eine Umgebungsvariable besitzt, hat die mit :setvar definierte Variable Vorrang.Variablennamen dürfen keine Leerzeichen enthalten.Variablennamen können nicht dieselbe Form wie ein Variablenausdruck haben, z. B. $(var).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.

  • :connect Servername[\Instanzname] [-l Timeout] [-U Benutzername [-P Kennwort]]
    Stellt eine Verbindung mit einer SQL Server-Instanz her und schließt die aktuelle Verbindung, nachdem die mit Timeout angegebene Anzahl von Sekunden verstrichen ist.Sie können "-l 0" angeben, um ein unendliches Timeout festzulegen, oder eine positive Anzahl von Sekunden wie "-l 30".Wenn Sie weder Optionen noch Umgebungsvariablen für Benutzername und Kennwort angeben, wird der Windows-Authentifizierungsmodus für die Anmeldung verwendet. Bei der Ausführung des connect-SQLCMD-Befehls im Transact-SQL-Editor werden Sie im Fenster Verbindung mit Datenbankmodul herstellen weiterhin aufgefordert, eine Verbindung mit einem Datenbankserver herzustellen.

  • :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 der exit-Option wird die Ausführung mit dem entsprechenden Fehlerwert beendet.Bei der ignore-Option ignoriert der Transact-SQL-Editor den Fehler und führt den Batch bzw. das Skript weiter aus.Es wird standardmäßig eine Fehlermeldung ausgegeben.

  • :out Dateiname | stderr | stdout
    Leitet alle Abfrageergebnisse in die mit Dateiname angegebene Datei oder zur Registerkarte Meldungen um.(In Visual Studio, stderr und stdout wird die Ausgabe an die Registerkarte Meldungen gesendet.) Der out-Befehl kann mehrmals in einem Skript verwendet werden.Die Ausgabe wird standardmäßig an die Registerkarte Meldungen gesendet.Falls ein Dateiname angegeben wird, erstellt oder öffnet Visual Studio eine Datei für die Abfrageergebnisse.Ist die Datei bereits vorhanden, wird sie vor dem Schreiben der Ausgabe auf 0 Byte gekürzt.

  • :error Dateiname | stderr | stdout
    Leitet alle Fehlerausgaben in die mit Dateiname angegebene Datei oder zur Registerkarte Meldungen um.(In Visual Studio, stderr und stdout wird die Ausgabe an die Registerkarte Meldungen gesendet.)  Der error-Befehl kann mehrmals in einem Skript verwendet werden.Die Fehlerausgabe wird standardmäßig an stderr gesendet.Falls ein Dateiname angegeben wird, erstellt oder öffnet Visual Studio eine Datei für die Fehlermeldung.Ist die Datei bereits vorhanden, wird sie vor dem Schreiben der Fehlermeldung auf 0 Byte gekürzt.

  • [:]exit
    Beendet den aktuellen Batch, ohne den Batch auszuführen oder einen Wert zurückzugeben.

  • [:]exit()
    Führt den Batch aus und beendet dann die Ausführung, ohne einen Wert zurückzugeben.

  • [:]exit(Abfrage)
    Führt den Batch aus (einschließlich der Abfrage), gibt die Ergebnisse der Abfrage zurück und beendet dann die Ausführung.

  • [:]!!Betriebssystembefehl
    Führt Betriebssystembefehle auf dem Computer mit Visual Studio aus.Beginnen Sie eine Zeile zum Ausführen eines Betriebssystembefehls mit zwei Ausrufezeichen (!!) gefolgt vom Betriebssystembefehl.

Tipp

Da SQLCMD nicht über die Befehlszeile gestartet wird, bestehen bei der Ausführung des Transact-SQL-Editors im SQLCMD-Modus einige Einschränkungen.So können Sie keine Befehlszeilenparameter wie Variablen übergeben. Außerdem dürfen keine interaktiven Anweisungen ausgeführt werden, da der Transact-SQL-Editor nicht auf Eingabeaufforderungen des Betriebssystems antworten kann.

Oben nicht aufgeführte SQLCMD-Befehle werden im Transact-SQL-Editor nicht unterstützt.Wenn ein Skript mit nicht unterstützten SQLCMD-Schlüsselwörtern ausgeführt wird, sendet der Transact-SQL-Editor für jedes nicht unterstützte Schlüsselwort eine Meldung "Command <unsupported command> is not supported. String was not processed." an das Ziel.Das Skript wird erfolgreich ausgeführt, die nicht unterstützten Befehle werden allerdings ignoriert.

Farbcodierung in SQLCMD-Skripts

Wenn der SQLCMD-Modus aktiviert ist, werden Skripts farbcodiert.Die Farbcodierung für Transact-SQL-Schlüsselwörter bleibt gleich.SQLCMD-Befehle werden mit einem schattierten Hintergrund angezeigt.

Beispiele

Im folgenden Beispiel werden ein Ausgabeordner mit dem Namen c:\TempSqlcmdOutput und eine Ausgabedatei mit dem Namen testoutput.txt mithilfe von SQLCMD-Anweisungen erstellt.Im Beispiel werden auch zwei Transact-SQL SELECT-Anweisungen und ein weiterer SQLCMD-Befehl ausgeführt, um das aktuelle Verzeichnis des Visual Studio-Programms auszugeben.Die resultierende Datei enthält die Meldungsausgabe der DIR-Anweisung gefolgt von der Ergebnisausgabe der Transact-SQL-Anweisungen.In diesem Beispiel wird davon ausgegangen, dass bereits eine Verbindung mit einer SQL Server-Instanz hergestellt und der SQLCMD-Modus aktiviert wurde.

!!mkdir c:\TempSqlcmdOutput
:out c:\TempSqlCmdOutput\testoutput.txt
select @@VERSION as 'Server Version'
!!dir
GO
select @@SERVERNAME as 'Server Name'
GO 4

Siehe auch

Aufgaben

Gewusst wie: Ausführen einer Abfrage

Gewusst wie: Festlegen von Optionen für Abfrageausführung und Ergebnisse

Konzepte

Übersicht über Abfrageergebnisse