Bearbeiten von SQLCMD-Skripts mit dem Abfrage-Editor

Mit dem Database Engine (Datenbankmodul)-Abfrage-Editor in SQL Server Management Studio können Sie Abfragen als SQLCMD-Skripts schreiben und bearbeiten. Sie verwenden SQLCMD-Skripts, wenn Sie Windows-Systembefehle und Transact-SQL-Anweisungen in einem Skript verarbeiten müssen.

SQLCMD-Modus

Wenn Sie den Database Engine (Datenbankmodul)-Abfrage-Editor zum Schreiben oder Bearbeiten von SQLCMD-Skripts verwenden möchten, müssen Sie den SQLCMD-Skriptmodus aktivieren. Standardmäßig ist der SQLCMD-Skriptmodus im Abfrage-Editor nicht aktiviert. Zum Aktivieren des Skriptmodus klicken Sie auf das Symbol SQLCMD-Modus auf der Symbolleiste, oder wählen Sie im Menü Abfrage die Option SQLCMD-Modus aus.

HinweisHinweis

Durch Aktivieren des SQLCMD-Modus werden IntelliSense und der Transact-SQL-Debugger im Database Engine (Datenbankmodul)-Abfrage-Editor deaktiviert.

SQLCMD-Skripts im Abfrage-Editor können dieselben Features wie alle Transact-SQL-Skripts verwenden. Zu diesen Features gehören folgende:

  • Farbcodierung

  • Ausführen von Skripts

  • Quellcodeverwaltung

  • Analysieren von Skripts

  • Showplan

Aktivieren von SQLCMD-Skripts im Abfrage-Editor

Verwenden Sie das folgende Verfahren, um die SQLCMD-Skripterstellung für ein aktives Fenster des Database Engine (Datenbankmodul)-Abfrage-Editors zu aktivieren.

So wechseln Sie in einem Abfrage-Editorfenster des Datenbankmoduls in den SQLCMD-Modus

  1. Klicken Sie im Objekt-Explorer mit der rechten Maustaste auf den Server, und klicken Sie dann auf Neue Abfrage, um ein neues Database Engine (Datenbankmodul)-Abfrage-Editorfenster zu öffnen.

  2. Klicken Sie im Menü Abfrage auf SQLCMD-Modus.

    Der Abfrage-Editor führt sqlcmd-Anweisungen im Kontext des Abfrage-Editors aus.

  3. Wählen Sie auf der SQL-Editor-Symbolleiste in der Liste Verfügbare Datenbanken die AdventureWorks-Datenbank aus.

  4. Geben Sie im Abfrage-Editorfenster die folgenden beiden Transact-SQL-Anweisungen und die !!DIR sqlcmd-Anweisung ein:

    SELECT DISTINCT Type FROM Sales.SpecialOffer;
    GO
    !!DIR
    GO
    SELECT ProductCategoryID, Name FROM Production.ProductCategory;
    GO
    
  5. Drücken Sie F5, um den gesamten Abschnitt gemischter Transact-SQL- und MS-DOS-Anweisungen auszuführen.

    Beachten Sie die beiden SQL-Ergebnisbereiche aus der ersten und dritten Anweisung.

  6. Klicken Sie im Bereich Ergebnisse auf die Registerkarte Meldungen, um die Meldungen für alle drei Anweisungen anzuzeigen:

    • (6 Zeile(n) betroffen)

    • <Verzeichnisinformationen>

    • (4 Zeile(n) betroffen)

Wichtiger HinweisWichtig

Wenn das Dienstprogramm sqlcmd an der Befehlszeile ausgeführt wird, ermöglicht es die vollständige Interaktion mit dem Betriebssystem. Wird der Abfrage-Editor im SQLCMD-Modus ausgeführt, müssen Sie darauf achten, dass Sie keine interaktiven Anweisungen ausführen. Der Abfrage-Editor kann auf keine Aufforderungen des Betriebssystems reagieren.

Weitere Informationen zum Ausführen von SQLCMD finden Sie unter sqlcmd (Dienstprogramm). Sie können auch das SQLCMD-Lernprogramm ausführen.

Aktivieren der SQLCMD-Skripterstellung als Standard

Zum Aktivieren der SQLCMD-Skripterstellung als Standard wählen Sie im Menü Extras die Option Optionen aus, erweitern Sie Abfrageausführung und SQL Server, klicken Sie auf die Seite Allgemein, und aktivieren Sie das Kontrollkästchen Standardmäßig neue Abfragen im SQLCMD-Modus öffnen.

Schreiben und Bearbeiten von SQLCMD-Skripts

Wenn Sie den Skriptmodus aktiviert haben, können Sie SQLCMD-Befehle und Transact-SQL-Anweisungen schreiben. Dabei gelten die folgenden Regeln:

  • SQLCMD-Befehle müssen die erste Anweisung in einer Zeile sein.

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

  • Vor SQLCMD-Befehlen können Kommentare oder Leerzeichen stehen.

  • SQLCMD-Befehle in Kommentarzeichen werden nicht ausgeführt.

  • Bei Kommentaren, die aus einer einzelnen Zeile bestehen, bestehen die Kommentarzeichen aus zwei Bindestrichen (--). Sie müssen am Anfang einer Zeile stehen.

  • Vor Betriebssystembefehlen müssen zwei Ausrufezeichen (!!) stehen. Der Befehl mit doppelten Ausrufezeichen sorgt dafür, dass die Anweisung nach den Ausrufezeichen mit dem Befehlsprozessor cmd.exe ausgeführt wird. Der Text nach !! wird als Parameter an cmd.exe übergeben. Die letzte Befehlszeile wird somit wie folgt ausgeführt: "%SystemRoot%\system32\cmd.exe /c <text after !!>". "%SystemRoot%\system32\cmd.exe /c <text after !!>".

  • Um eine klare Unterscheidung zwischen SQLCMD-Befehlen und Transact-SQL zu treffen, müssen alle SQLCMD-Befehle als Präfix einen Doppelpunkt (:) haben.

  • Der GO-Befehl kann möglicherweise verwendet werden, ohne ihm etwas voranzustellen oder mit vorangestelltem !!:.

  • Der Database Engine (Datenbankmodul)-Abfrage-Editor unterstützt Umgebungsvariablen und Variablen, die als Teil eines SQLCMD-Skripts definiert sind. Integrierte SQLCMD- oder osql-Variablen werden jedoch nicht unterstützt. Bei der SQLCMD-Verarbeitung von SQL Server Management Studio wird für Variablen die Groß- und Kleinschreibung beachtet. PRINT '$(COMPUTERNAME)' erzeugt beispielsweise das korrekte Ergebnis, bei PRINT '$(ComputerName)' wird jedoch ein Fehler zurückgegeben.

VorsichtshinweisVorsicht

SQL Server Management Studio verwendet Microsoft.NET FrameworkSqlClient zur Ausführung im regulären und im SQLCMD-Modus. Beim Ausführen an der Befehlszeile verwendet SQLCMD den OLE DB-Anbieter. Da unterschiedliche Standardoptionen gelten können, wird beim Ausführen derselben Abfrage im SQLCMD-Modus in SQL Server Management Studio und im Dienstprogramm SQLCMD möglicherweise ein anderes Verhalten erzielt.

Unterstützte SQLCMD-Syntax

Der Database Engine (Datenbankmodul)-Abfrage-Editor unterstützt die folgenden Schlüsselwörter für SQLCMD-Skripts:

[!!:]GO[count]

!! <command>

:exit(statement)

:Quit

:r <filename>

:setvar <var> <value>

:connect server[\instance] [-l login_timeout] [-U user [-P password]]

:on error [ignore|exit]

:error <filename>|stderr|stdout

:out <filename>|stderr|stdout

HinweisHinweis

stderr und stdout senden sowohl für :error als auch für :out die Ausgabe an die Registerkarte Meldungen.

SQLCMD-Befehle, die oben nicht aufgeführt sind, werden im Abfrage-Editor nicht unterstützt. Wenn ein Skript ausgeführt wird, das nicht unterstützte SQLCMD-Schlüsselwörter enthält, sendet der Abfrage-Editor für jedes nicht unterstützte Schlüsselwort die Meldung "Ignoring command <ignored command>" an das Ziel. Das Skript wird erfolgreich ausgeführt. Die nicht unterstützten Befehle werden allerdings ignoriert.

VorsichtshinweisVorsicht

Da Sie SQLCMD nicht über die Befehlszeile starten, bestehen beim Ausführen des Abfrage-Editors im SQLCMD-Modus einige Einschränkungen. So können Sie keine Befehlszeilenparameter wie Variablen übergeben. Außerdem müssen Sie darauf achten, keine interaktiven Anweisungen auszuführen, da der Abfrage-Editor nicht auf Eingabeaufforderungen des Betriebssystems antworten kann.

Farbcodierung in SQLCMD-Skripts

Wenn die SQLCMD-Skripterstellung aktiviert sind, werden die Skripts farblich codiert. Die Farbcodierung für Transact-SQL-Schlüsselwörter bleibt gleich. SQLCMD-Befehle werden mit einem schattierten Hintergrund angezeigt.

Beispiel

Im folgenden Beispiel wird eine sqlcmd-Anweisung zum Erstellen einer Ausgabedatei mit dem Namen testoutput.txt verwendet, und es werden zwei Transact-SQL-SELECT-Anweisungen zusammen mit einem Betriebssystembefehl ausgeführt (zum Drucken des aktuellen Verzeichnisses). Die ergebene Datei enthält die Meldungsausgabe von der DIR-Anweisung gefolgt von der ergebenen Ausgabe der Transact-SQL-Anweisungen.

:out C:\testoutput.txt
SELECT @@VERSION As 'Server Version'
!!DIR
!!:GO
SELECT @@SERVERNAME AS 'Server Name'
GO

Siehe auch

Verweis

Konzepte