Bearbeiten von SQLCMD-Skripts mit dem Abfrage-Editor

Gilt für: SQL Server (alle unterstützten Versionen) Azure SQL-Datenbank Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

Mithilfe des Datenbank-Engine-Abfrage-Editors in SQL Server Management Studio können Sie Abfragen als sqlcmd-Skripte schreiben und bearbeiten. Sie verwenden SQLCMD-Skripts, wenn Sie Windows-Systembefehle und Transact-SQL -Anweisungen in demselben Skript verarbeiten müssen.

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

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

So wechseln Sie in einem Abfrage-Editorfenster der Datenbank-Engine 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 Datenbank-Engine -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 AdventureWorks2012-Datenbank aus.

  4. Geben Sie im Fenster des Abfrage-Editors die folgenden beiden Transact-SQL-Anweisungen und die !!DIRsqlcmd-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 mit gemischten 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)

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 sqlcmd Utility. 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 Optionenaus, erweitern Sie Abfrageausführungund 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

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, 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 !!>".

  • Um einen klaren Unterschied zwischen SQLCMD-Befehlen und Transact-SQL zu machen, muss allen SQLCMD-Befehlen ein Doppelpunkt (:) vorangestellt werden.

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

  • Der Datenbank-Engine -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 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, tritt beim Ausführen derselben Abfrage im sqlcmd-Modus in SQL Server Management Studio und im Hilfsprogramm sqlcmd möglicherweise ein anderes Verhalten auf.

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 :outsenden 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. 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 Farbkodierung 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 TransactSQL -SELECT-Anweisungen zusammen mit einem Betriebssystembefehl ausgeführt (zum Drucken des aktuellen Verzeichnisses). Die resultierende Datei enthält die Nachrichtenausgabe der DIR-Anweisung, gefolgt von den Ergebnisausgaben der Transact-SQL-Anweisungen.

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

Weitere Informationen

SQLCMD-Hilfsprogramm