Freigeben über


Bearbeiten von SQLCMD-Skripts mit dem Abfrage-Editor

Verwenden Sie den Abfrage-Editor in SQL Server Management Studio (SSMS), um Abfragen als SQLCMD-Skripts zu schreiben und zu bearbeiten. Sie können SQLCMD-Skripts verwenden, um Windows-Systembefehle und Transact-SQL Anweisungen im selben Skript zu verarbeiten.

Aktivieren des SQLCMD-Modus

Um den Abfrage-Editor zum Schreiben oder Bearbeiten von SQLCMD-Skripts zu verwenden, müssen Sie den SQLCMD-Skriptmodus aktivieren. Der SQLCMD-Modus ist standardmäßig nicht aktiviert. Sie können den Skriptmodus aktivieren, indem Sie das SQLCMD-Modussymbol in der Symbolleiste auswählen oder im Menü "Abfrage" den SQLCMD-Modus auswählen.

Hinweis

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

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

  • Farbcodierung
  • Ausführung von Skripts
  • Quellcodeverwaltung
  • Analysieren von Skripts
  • Anzeigenplan

Aktivieren von SQLCMD-Skripts im Abfrage-Editor

Zum Aktivieren der SQLCMD-Skripterstellung für ein aktives Abfrage-Editor-Fenster verwenden Sie das folgende Verfahren.

Wechseln eines Abfrage-Editor-Fensters in den SQLCMD-Modus

  1. Klicken Sie im Objekt-Explorer mit der rechten Maustaste auf den Server, und wählen Sie dann "Neue Abfrage " aus, um ein neues Abfrage-Editor-Fenster zu öffnen.

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

    SQLCMD-Anweisungen werden im Kontext des Abfrage-Editors ausgeführt.

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

  4. Geben Sie im Abfrage-Editor-Fenster die folgenden 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 row(s) affected)
    • <The directory information>
    • (4 row(s) affected)

Von Bedeutung

Wenn Sie sqlcmd über die Befehlszeile ausführen, ermöglicht sie die vollständige Interaktion mit dem Betriebssystem. Wenn Sie den Abfrage-Editor im SQLCMD-Modus verwenden, achten Sie darauf, keine interaktiven Anweisungen auszuführen. Der Abfrage-Editor kann nicht auf Eingabeaufforderungen des Betriebssystems reagieren. Weitere Informationen zum Ausführen von SQLCMD über die Befehlszeile finden Sie unter sqlcmd-Hilfsprogramm.

SQLCMD-Skripting standardmäßig aktivieren

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 sowohl SQLCMD-Befehle als auch 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.

  • Sie können Kommentare und Leerzeichen vor SQLCMD-Befehlen verwenden.

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

  • Einzeilige Kommentarzeichen sind zwei Bindestriche (--) und müssen am Anfang einer Zeile angezeigt werden.

  • Befehle des Betriebssystems mit zwei Ausrufezeichen (!!) versehen. 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, sodass die letzte Befehlszeile als "%SystemRoot%\system32\cmd.exe /c <text after !!>" ausgeführt wird.

  • Um einen klaren Unterschied zwischen SQLCMD-Befehlen und Transact-SQL zu machen, präfixieren Sie alle SQLCMD-Befehle mit einem Doppelpunkt (:).

  • Der GO-Befehl kann ohne Präfix oder mit vorangestelltem !!: verwendet werden.

  • Der Abfrage-Editor unterstützt Umgebungsvariablen und Variablen, die Sie als Teil eines SQLCMD-Skripts definieren, aber es unterstützt keine integrierten SQLCMD- oder osql-Variablen . SSMS verarbeitet SQLCMD-Variablen unter Berücksichtigung der Groß- und Kleinschreibung. Erzeugt z. B PRINT '$(COMPUTERNAME)' . das richtige Ergebnis, gibt jedoch PRINT '$(ComputerName)' einen Fehler zurück.

Vorsicht

SSMS verwendet dieSqlClient .NET-Bibliothek für die Ausführung im regulären und SQLCMD-Modus. Wenn Sie die Abfrage über die Befehlszeile ausführen, verwendet sqlcmd den OLE DB-Anbieter. Da unterschiedliche Standardoptionen angewendet werden können, sehen Sie möglicherweise ein anderes Verhalten beim Ausführen derselben Abfrage im SQLCMD-Modus innerhalb von SSMS im Vergleich zum SQLCMD-Modus im sqlcmd-Hilfsprogramm .

Unterstützte SQLCMD-Syntax

Der Abfrage-Editor unterstützt die folgenden SQLCMD-Skriptstichwörter:

  • [!!:]GO[count]
  • !! <command>
  • :exit(statement)
  • :Quit
  • :r <filename>
  • :setvar <var> <value>
  • :connect server[\instance] [-l login_timeout] [-U user [-P password]] 1
  • :on error [ignore|exit]
  • :error <filename>|stderr|stdout 2
  • :out <filename>|stderr|stdout 2

1 Weitere Informationen zum :connect Befehl finden Sie unter Befehle im sqlcmd-Hilfsprogramm.

2 Der Abfrage-Editor sendet die Ausgabe an die Registerkarte "Nachrichten " für stderr und stdout.

Der Abfrage-Editor unterstützt keine SQLCMD-Befehle, die nicht in der vorherigen Liste enthalten sind. Wenn Sie ein Skript ausführen, das nicht unterstützte SQLCMD-Schlüsselwörter enthält, ignoriert der Abfrage-Editor den Befehl. Für jedes nicht unterstützte Schlüsselwort sendet der Abfrage-Editor die folgende Nachricht an das Ziel:

Ignoring command <ignored_command>

Vorsicht

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

Farbcodierung in SQLCMD-Skripts

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

Examples

Im folgenden Beispiel wird eine SQLCMD-Anweisung verwendet, um eine Ausgabedatei mit dem Namen testoutput.txtzu erstellen. Es führt zwei Transact-SQL SELECT Anweisungen und einen Betriebssystembefehl aus, der das aktuelle Verzeichnis druckt. Die resultierende Datei enthält die Nachrichtenausgabe aus der DIR Anweisung und die Ergebnisausgabe aus den Transact-SQL-Anweisungen.

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