Bearbeiten von SQLCMD-Skripts mit dem Abfrage-Editor

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Mithilfe des Abfrage-Editors der Datenbank-Engine 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 demselben Skript verarbeiten.

SQLCMD-Modus

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

Hinweis

Wenn Sie den SQLCMD-Modus aktivieren, werden IntelliSense und der Transact-SQL-Debugger im Abfrage-Editor der Datenbank-Engine deaktiviert.

SQLCMD-Skripte im Abfrage-Editor können die gleichen Funktionen wie alle Transact-SQL-Skripte verwenden. Zu diesen Funktionen gehören folgende:

  • Farbcodierung
  • Ausführung 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 Datenbank-Engine -Abfrage-Editors zu aktivieren.

Wechseln in den SQLCMD-Modus in einem Fenster des Abfrage-Editors der Datenbank-Engine

  1. Klicken Sie im Objekt-Explorer mit der rechten Maustaste auf den Server, und klicken Sie dann auf Neue Abfrage, um ein neues Fenster des Abfrage-Editors der Datenbank-Engine 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 AdventureWorks2022-Datenbank aus.

  4. Geben Sie im Fenster des Abfrage-Editors 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 Abschnitt mit gemischten Transact-SQL- und MS-DOS-Anweisungen auszuführen.

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

  6. Wählen Sie im Bereich Ergebnisse die Registerkarte Meldungen aus, um die Meldungen für alle drei Anweisungen anzuzeigen:

    • (6 Zeile(n) betroffen)
    • <Verzeichnisinformationen>
    • (4 Zeile(n) betroffen)

Wichtig

Wenn das Hilfsprogramm sqlcmd an der Befehlszeile ausgeführt wird, ermöglicht es die vollständige Interaktion mit dem Betriebssystem. Wird der Abfrage-Editor im SQLCMD-Modusausgefü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 Hilfsprogramm „sqlcmd“. Sie können auch das Tutorial zu SQLCMD 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, wählen Sie die Seite Allgemein aus, und aktivieren Sie das Kontrollkästchen Neue Abfragen standardmäßig im SQLCMD-Modus öffnen.

Schreiben und Bearbeiten von SQLCMD-Skripts

Nachdem Sie den Skriptmodus aktiviert haben, können Sie SQLCMD-Befehle und Transact-SQL-Anweisungen schreiben. Es 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, werden als Kommentarzeichen zwei Bindestriche (--) verwendet. Sie müssen am Anfang der 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 !!>".

  • Um klar zwischen SQLCMD-Befehlen und Transact-SQL zu unterscheiden, muss allen SQLCMD-Befehlen ein Doppelpunkt (:) vorangestellt werden.

  • Der GO-Befehl kann ohne Einleitung oder mit vorangestelltem !!: verwendet werden.

  • Der Abfrage-Editor der Datenbank-Engine 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 durch SQL Server Management Studio wird Groß-/Kleinschreibung bei Variablen beachtet. PRINT '$(COMPUTERNAME)' erzeugt beispielsweise das korrekte Ergebnis, bei PRINT '$(ComputerName)' wird jedoch ein Fehler zurückgegeben.

Achtung

SQL Server Management Studio verwendet Microsoft.NET FrameworkSqlClient für die 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, kann sich das Verhalten derselben Abfrage unterscheiden, je nachdem, ob sie im SQLCMD-Modus in SQL Server Management Studio oder im Hilfsprogramm „sqlcmd“ ausgeführt wird.

Unterstützte SQLCMD-Syntax

Der Datenbank-Engine -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

Hinweis

:error und :out senden sowohl für stderr als auch für stdout 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 <ignorierter Befehl>“ an das Ziel. Das Skript wird erfolgreich ausgeführt. Die nicht unterstützten Befehle werden allerdings ignoriert.

Achtung

Da Sie SQLCMD nicht über die Befehlszeile starten, bestehen beim Ausführen des Abfrage-Editors im SQLCMD-Modus einige Einschränkungen. Sie können 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 resultierende Datei enthält die Meldungsausgabe der DIR-Anweisung und die Ergebnisausgaben der Transact-SQL-Anweisungen.

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

Nächste Schritte