Bearbeiten von SQLCMD-Skripts mit dem Abfrage-EditorEdit SQLCMD Scripts with Query Editor

Mit dem DatenbankmodulDatabase Engine -Abfrage-Editor in SQL Server Management StudioSQL Server Management Studio können Sie Abfragen als SQLCMD-Skripts schreiben und bearbeiten.By using the DatenbankmodulDatabase Engine Query Editor in SQL Server Management StudioSQL Server Management Studio you can write and edit queries as SQLCMD scripts. Sie verwenden SQLCMD-Skripts, wenn Sie Windows-Systembefehle und Transact-SQLTransact-SQL -Anweisungen in einem Skript verarbeiten müssen.You use SQLCMD scripts when you have to process Windows System commands and Transact-SQLTransact-SQL statements in the same script.

SQLCMD-ModusSQLCMD Mode

Wenn Sie den DatenbankmodulDatabase Engine -Abfrage-Editor zum Schreiben oder Bearbeiten von SQLCMD-Skripts verwenden möchten, müssen Sie den SQLCMD-Skriptmodus aktivieren.To use the DatenbankmodulDatabase Engine Query Editor to write or edit SQLCMD scripts, you must enable the SQLCMD scripting mode. Standardmäßig ist der SQLCMD-Skriptmodus im Abfrage-Editor nicht aktiviert.By default, SQLCMD mode is not enabled in the Query Editor. 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.You can enable scripting mode by clicking the SQLCMD Mode icon in the toolbar or by selecting SQLCMD Mode from the Query menu.

Hinweis

Durch Aktivieren des SQLCMD-Modus werden IntelliSense und der Transact-SQLTransact-SQL -Debugger im DatenbankmodulDatabase Engine -Abfrage-Editor deaktiviert.Enabling SQLCMD mode turns off IntelliSense and the Transact-SQLTransact-SQL debugger in the DatenbankmodulDatabase Engine Query Editor.

SQLCMD-Skripts im Abfrage-Editor können dieselben Funktionen wie alle Transact-SQLTransact-SQL -Skripts verwenden.SQLCMD scripts in the Query Editor can use the same features that all Transact-SQLTransact-SQL scripts use. Zu diesen Funktionen gehören folgende:These features include the following:

  • FarbcodierungColor Coding

  • Ausführen von SkriptsExecuting Scripts

  • QuellcodeverwaltungSource Control

  • Analysieren von SkriptsParsing Scripts

  • ShowplanShowplan

Aktivieren von SQLCMD-Skripts im Abfrage-EditorEnable SQLCMD Scripting in Query Editor

Verwenden Sie das folgende Verfahren, um die SQLCMD-Skripterstellung für ein aktives Fenster des DatenbankmodulDatabase Engine -Abfrage-Editors zu aktivieren.To turn SQLCMD scripting on for an active DatenbankmodulDatabase Engine Query Editor window, use the following procedure.

So wechseln Sie in einem Abfrage-Editorfenster des Datenbankmoduls in den SQLCMD-ModusTo switch a Database Engine Query Editor window to SQLCMD mode

  1. Klicken Sie im Objekt-Explorer mit der rechten Maustaste auf den Server, und klicken Sie dann auf Neue Abfrage, um ein neues DatenbankmodulDatabase Engine -Abfrage-Editorfenster zu öffnen.In Object Explorer, right-click the server, and then click New Query, to open a new DatenbankmodulDatabase Engine Query Editor window.

  2. Klicken Sie im Menü Abfrage auf SQLCMD-Modus.On the Query menu, click SQLCMD Mode.

    Der Abfrage-Editor führt sqlcmd -Anweisungen im Kontext des Abfrage-Editors aus.The Query Editor executes sqlcmd statements in the context of the Query Editor.

  3. Wählen Sie auf der SQL-Editor -Symbolleiste in der Liste Verfügbare Datenbanken die AdventureWorks2012AdventureWorks2012-Datenbank aus.On the SQL Editor toolbar, in the Available Databases list, select AdventureWorks2012AdventureWorks2012.

  4. Geben Sie im Fenster des Abfrage-Editors die folgenden beiden Transact-SQLTransact-SQL -Anweisungen und die !!DIR sqlcmd -Anweisung ein:In the Query Editor window, type the following two Transact-SQLTransact-SQL statements and the !!DIR sqlcmd statement:

    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-SQLTransact-SQL - und MS-DOS-Anweisungen auszuführen.Press F5 to execute the whole section of mixed Transact-SQLTransact-SQL and MS-DOS statements.

    Beachten Sie die beiden SQL-Ergebnisbereiche aus der ersten und dritten Anweisung.Notice the two SQL result panes from the first and third statements.

  6. Klicken Sie im Bereich Ergebnisse auf die Registerkarte Meldungen , um die Meldungen für alle drei Anweisungen anzuzeigen:In the Results pane, click the Messages tab to see the messages from all three statements:

    • (6 Zeile(n) betroffen)(6 row(s) affected)

    • <Verzeichnisinformationen><The directory information>

    • (4 Zeile(n) betroffen)(4 row(s) affected)

Wichtig

Wenn das Hilfsprogramm sqlcmd an der Befehlszeile ausgeführt wird, ermöglicht es die vollständige Interaktion mit dem Betriebssystem.When executed from the command line, the sqlcmd utility permits full interaction with the operating system. Wird der Abfrage-Editor im SQLCMD-Modusausgeführt, müssen Sie darauf achten, dass Sie keine interaktiven Anweisungen ausführen.When you use the Query Editor in SQLCMD Mode, you must be careful not to execute interactive statements. Der Abfrage-Editor kann auf keine Aufforderungen des Betriebssystems reagieren.The Query Editor cannot respond to operating system prompts.

Weitere Informationen zum Ausführen von SQLCMD finden Sie unter sqlcmd Utility. Sie können auch das SQLCMD-Lernprogramm ausführen.For more information about how to run SQLCMD, see sqlcmd Utility, or take the SQLCMD tutorial.

Aktivieren der SQLCMD-Skripterstellung als StandardEnable SQLCMD Scripting by Default

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 .To turn SQLCMD scripting on by default, on the Tools menu select Options, expand Query Execution, and SQL Server, click the General page, and then check the By default open new queries in SQLCMD Mode box.

Schreiben und Bearbeiten von SQLCMD-SkriptsWriting and Editing SQLCMD Scripts

Wenn Sie den Skriptmodus aktiviert haben, können Sie SQLCMD-Befehle und Transact-SQLTransact-SQL -Anweisungen schreiben.After enabling scripting mode you may write SQLCMD commands and Transact-SQLTransact-SQL statements. Dabei gelten die folgenden Regeln:The following rules apply:

  • SQLCMD-Befehle müssen die erste Anweisung in einer Zeile sein.SQLCMD commands must be the first statement on a line.

  • Pro Zeile ist nur ein SQLCMD-Befehl zulässig.Only one SQLCMD command is permitted on each line.

  • Vor SQLCMD-Befehlen können Kommentare oder Leerzeichen stehen.SQLCMD commands can be preceded by comments or white space.

  • SQLCMD-Befehle in Kommentarzeichen werden nicht ausgeführt.SQLCMD commands within comment characters are not executed.

  • Bei Kommentaren, die aus einer einzelnen Zeile bestehen, bestehen die Kommentarzeichen aus zwei Bindestrichen (--) . Sie müssen am Anfang einer Zeile stehen.Single line comment characters are two hyphens (--) and must appear at the beginning of a line.

  • Vor Betriebssystembefehlen müssen zwei Ausrufezeichen (!!) stehen.Operating system commands must be preceded by two exclamation points (!!). Der Befehl mit doppelten Ausrufezeichen sorgt dafür, dass die Anweisung nach den Ausrufezeichen mit dem Befehlsprozessor cmd.exe ausgeführt wird.The double-exclamation points command causes the statement that follows the exclamation points to be executed using the cmd.exe command processor. 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 !!>".The text after !! is passed in as a parameter to cmd.exe, so the final command line will execute as: "%SystemRoot%\system32\cmd.exe /c <text after !!>".

  • Um eine klare Unterscheidung zwischen SQLCMD-Befehlen und Transact-SQLTransact-SQLzu treffen, müssen alle SQLCMD-Befehle als Präfix einen Doppelpunkt (:) haben.To make a clear distinction between SQLCMD commands and Transact-SQLTransact-SQL, all SQLCMD commands, need to be prefixed with a colon (:).

  • Der GO -Befehl kann möglicherweise verwendet werden, ohne ihm etwas voranzustellen oder mit vorangestelltem !!:The GO command may be used without preface, or preceded by !!:

  • Der DatenbankmodulDatabase 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.The DatenbankmodulDatabase Engine Query Editor supports environment variables and variables that are defined as part of a SQLCMD script, but does not support built-in SQLCMD or osql variables. Bei der SQLCMD-Verarbeitung von SQL Server Management StudioSQL Server Management Studio wird für Variablen die Groß- und Kleinschreibung beachtet.SQLCMD processing by SQL Server Management StudioSQL Server Management Studio is case sensitive for variables. PRINT '$(COMPUTERNAME)' erzeugt beispielsweise das korrekte Ergebnis, bei PRINT '$(ComputerName)' wird jedoch ein Fehler zurückgegeben.For example, PRINT '$(COMPUTERNAME)' produces the correct result, but PRINT '$(ComputerName)' returns an error.

Achtung

SQL Server Management StudioSQL Server Management Studio verwendet MicrosoftMicrosoft .NET Framework.NET FrameworkSqlClient zur Ausführung im regulären und im SQLCMD-Modus. SQL Server Management StudioSQL Server Management Studio uses MicrosoftMicrosoft .NET Framework.NET FrameworkSqlClient for execution in regular and SQLCMD mode. Beim Ausführen an der Befehlszeile verwendet SQLCMD den OLE DB-Anbieter.When run from the command line, SQLCMD uses the OLE DB provider. Da unterschiedliche Standardoptionen gelten können, wird beim Ausführen derselben Abfrage im SQLCMD-Modus in SQL Server Management StudioSQL Server Management Studio und im Hilfsprogramm SQLCMD möglicherweise ein anderes Verhalten erzielt.Because different default options may apply, it is possible to get different behavior while executing the same query in SQL Server Management StudioSQL Server Management Studio SQLCMD Mode, and in the SQLCMD utility.

Unterstützte SQLCMD-SyntaxSupported SQLCMD Syntax

Der DatenbankmodulDatabase Engine -Abfrage-Editor unterstützt die folgenden Schlüsselwörter für SQLCMD-Skripts:The DatenbankmodulDatabase Engine Query Editor supports the following SQLCMD script keywords:

[!!:]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.For both :error and :out, stderr and stdout send output to the messages tab.

SQLCMD-Befehle, die oben nicht aufgeführt sind, werden im Abfrage-Editor nicht unterstützt.SQLCMD commands not listed above are not supported in Query Editor. 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.When a script containing SQLCMD keywords that are not supported is executed, the Query Editor will send an "Ignoring command <ignored command>" message to the destination for each unsupported keyword. Das Skript wird erfolgreich ausgeführt. Die nicht unterstützten Befehle werden allerdings ignoriert.The script will execute successfully, but the unsupported commands will be ignored.

Achtung

Da Sie SQLCMD nicht über die Befehlszeile starten, bestehen beim Ausführen des Abfrage-Editors im SQLCMD-Modus einige Einschränkungen.Because you are not starting SQLCMD from the command line, there are some limitations when running Query Editor in SQLCMD Mode. 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.You cannot pass in command-line parameters such as variables, and, because the Query Editor does not have the ability to respond to operating system prompts, you must be careful not to execute interactive statements.

Farbcodierung in SQLCMD-SkriptsColor Coding in SQLCMD Scripts

Wenn die SQLCMD-Skripterstellung aktiviert sind, werden die Skripts farblich codiert.With SQLCMD scripting enabled, scripts will be color coded. Die Farbcodierung für Transact-SQLTransact-SQL -Schlüsselwörter bleibt gleich.The color coding for Transact-SQLTransact-SQL keywords will remain the same. SQLCMD-Befehle werden mit einem schattierten Hintergrund angezeigt.SQLCMD commands are presented with a shaded background.

BeispielExample

Im folgenden Beispiel wird eine sqlcmd -Anweisung zum Erstellen einer Ausgabedatei mit dem Namen „testoutput.txt“ verwendet, und es werden zwei Transact-SQLTransact-SQL -SELECT-Anweisungen zusammen mit einem Betriebssystembefehl ausgeführt (zum Drucken des aktuellen Verzeichnisses).The following example uses a sqlcmd statement to create an output file called testoutput.txt, executes two Transact-SQLTransact-SQL SELECT statements along with one operating system command (to print out the current directory). Die ergebene Datei enthält die Meldungsausgabe von der DIR -Anweisung gefolgt von der ergebenen Ausgabe der Transact-SQLTransact-SQL -Anweisungen.The resultant file contains the message output from the DIR statement, followed by the results output from the Transact-SQLTransact-SQL statements.

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

Siehe auchSee Also

sqlcmd Utilitysqlcmd Utility