Modifier des scripts SQLCMD à l'aide de l'Éditeur de requêteEdit SQLCMD Scripts with Query Editor

Cette rubrique s’applique à : OuiSQL ServerOuibase de données SQL AzureOuiAzure SQL Data Warehouse Oui Parallel Data WarehouseTHIS TOPIC APPLIES TO: yesSQL ServeryesAzure SQL DatabaseyesAzure SQL Data Warehouse yesParallel Data Warehouse Grâce à l’éditeur de requête du Moteur de base de donnéesDatabase Engine dans SQL Server Management StudioSQL Server Management Studio, vous pouvez écrire et modifier des requêtes en tant que scripts SQLCMD. By using the Moteur de base de donnéesDatabase Engine Query Editor in SQL Server Management StudioSQL Server Management Studio you can write and edit queries as SQLCMD scripts. Vous utilisez des scripts SQLCMD lorsque vous devez traiter des commandes Windows System et des instructions Transact-SQLTransact-SQL dans le même script.You use SQLCMD scripts when you have to process Windows System commands and Transact-SQLTransact-SQL statements in the same script.

Mode SQLCMDSQLCMD Mode

Pour utiliser l'éditeur de requête du Moteur de base de donnéesDatabase Engine moteur de base de données afin d'écrire ou de modifier des scripts SQLCMD, vous devez activer le mode de script SQLCMD.To use the Moteur de base de donnéesDatabase Engine Query Editor to write or edit SQLCMD scripts, you must enable the SQLCMD scripting mode. Par défaut, il n'est pas activé dans l'Éditeur de requête.By default, SQLCMD mode is not enabled in the Query Editor. Vous pouvez l'activer en cliquant sur l'icône Mode SQLCMD dans la barre d'outils ou en sélectionnant Mode SQLCMD dans le menu Requête .You can enable scripting mode by clicking the SQLCMD Mode icon in the toolbar or by selecting SQLCMD Mode from the Query menu.

Note

L'activation du mode SQLCMD désactive IntelliSense et le débogueur Transact-SQLTransact-SQL dans l'éditeur de requête du Moteur de base de donnéesDatabase Engine .Enabling SQLCMD mode turns off IntelliSense and the Transact-SQLTransact-SQL debugger in the Moteur de base de donnéesDatabase Engine Query Editor.

Dans l'Éditeur de requête, les scripts SQLCMD peuvent utiliser les mêmes fonctionnalités que tous les scripts Transact-SQLTransact-SQL .SQLCMD scripts in the Query Editor can use the same features that all Transact-SQLTransact-SQL scripts use. Ces fonctionnalités incluent les suivantes :These features include the following:

  • codage en couleurs ;Color Coding

  • exécution des scripts ;Executing Scripts

  • contrôle de code source ;Source Control

  • analyse des scripts ;Parsing Scripts

  • ShowplanShowplan

Activation des scripts SQLCMD dans l'Éditeur de requêteEnable SQLCMD Scripting in Query Editor

Pour activer le script SQLCMD pour une fenêtre active de l'éditeur de requête du Moteur de base de donnéesDatabase Engine moteur de base de données, utilisez la procédure suivante.To turn SQLCMD scripting on for an active Moteur de base de donnéesDatabase Engine Query Editor window, use the following procedure.

Pour basculer l'Éditeur de requête du moteur de base de données en mode SQLCMDTo switch a Database Engine Query Editor window to SQLCMD mode

  1. Dans l’Explorateur d’objets, cliquez avec le bouton droit sur le serveur et choisissez Nouvelle requêtepour ouvrir une nouvelle fenêtre de l’éditeur de requête du Moteur de base de donnéesDatabase Engine .In Object Explorer, right-click the server, and then click New Query, to open a new Moteur de base de donnéesDatabase Engine Query Editor window.

  2. Dans le menu Requête , cliquez sur Mode SQLCMD.On the Query menu, click SQLCMD Mode.

    L'éditeur de requête exécute les instructions sqlcmd dans son contexte.The Query Editor executes sqlcmd statements in the context of the Query Editor.

  3. Dans la barre d'outils Éditeur SQL , dans la liste Bases de données disponibles , sélectionnez AdventureWorks2012AdventureWorks2012.On the SQL Editor toolbar, in the Available Databases list, select AdventureWorks2012AdventureWorks2012.

  4. Dans la fenêtre de l’éditeur de requête, tapez les deux instructions Transact-SQLTransact-SQL suivantes et l’instruction !!DIR sqlcmd :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. Appuyez sur F5 pour exécuter toute la section d'instructions Transact-SQLTransact-SQL et MS-DOS.Press F5 to execute the whole section of mixed Transact-SQLTransact-SQL and MS-DOS statements.

    Consultez les deux volets de résultats SQL générés par la première et la troisième instruction.Notice the two SQL result panes from the first and third statements.

  6. Dans le volet Résultats , cliquez sur l'onglet Messages pour afficher les messages des trois instructions :In the Results pane, click the Messages tab to see the messages from all three statements:

    • (6 lignes affectées)(6 row(s) affected)

    • <Informations sur le répertoire><The directory information>

    • (4 lignes affectées)(4 row(s) affected)

Important

Lorsque l'utilitaire sqlcmd est exécuté à partir de la ligne de commande, il permet une interaction totale avec le système d’exploitation.When executed from the command line, the sqlcmd utility permits full interaction with the operating system. Lorsque vous utilisez l'Éditeur de requête en Mode SQLCMD, vous devez veiller à ne pas exécuter d'instructions interactives.When you use the Query Editor in SQLCMD Mode, you must be careful not to execute interactive statements. L'Éditeur de requêtes ne peut pas répondre aux invites du système d'exploitation.The Query Editor cannot respond to operating system prompts.

Pour plus d'informations sur l'exécution de SQLCMD, consultez sqlcmd Utilityou suivez le didacticiel qui lui est consacré.For more information about how to run SQLCMD, see sqlcmd Utility, or take the SQLCMD tutorial.

Activation des scripts SQLCMD par défautEnable SQLCMD Scripting by Default

Pour activer les scripts SQLCMD par défaut, dans le menu Outils , sélectionnez Options, développez Exécution de la requête, SQL Server, cliquez sur la page Général , puis activez la case à cocher Par défaut, ouvrir les nouvelles requêtes en mode SQLCMD .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.

Écriture et modification de scripts SQLCMDWriting and Editing SQLCMD Scripts

Une fois le mode de scripts activé, vous pouvez écrire des commandes SQLCMD et des instructions Transact-SQLTransact-SQL .After enabling scripting mode you may write SQLCMD commands and Transact-SQLTransact-SQL statements. Les règles suivantes s'appliquent :The following rules apply:

  • Les commandes SQLCMD doivent être la première instruction d'une ligne.SQLCMD commands must be the first statement on a line.

  • Une seule commande SQLCMD est autorisée par ligne.Only one SQLCMD command is permitted on each line.

  • Les commandes SQLCMD peuvent être précédées de commentaires ou d'espaces.SQLCMD commands can be preceded by comments or white space.

  • Les commandes SQLCMD placées entre des caractères de commentaires ne sont pas exécutées.SQLCMD commands within comment characters are not executed.

  • Les caractères de commentaires d'une seule ligne sont deux tirets (--) qui doivent être placés au début d'une ligne.Single line comment characters are two hyphens (--) and must appear at the beginning of a line.

  • Les commandes du système d'exploitation doivent être précédées de deux points d'exclamation (!!).Operating system commands must be preceded by two exclamation points (!!). La commande avec deux points d'exclamation entraîne l'exécution de l'instruction qui suit les points d'exclamation avec le processeur de commandes cmd.exe .The double-exclamation points command causes the statement that follows the exclamation points to be executed using the cmd.exe command processor. Le texte situé après !! est transmis en tant que paramètre à cmd.exe. La ligne de commande finale s'exécute donc en tant que : "%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 !!>".

  • Pour distinguer clairement les commandes SQLCMD des commandes Transact-SQLTransact-SQL, toutes les commandes SQLCMD doivent être précédées d'un symbole deux-points (:).To make a clear distinction between SQLCMD commands and Transact-SQLTransact-SQL, all SQLCMD commands, need to be prefixed with a colon (:).

  • La commande GO peut être utilisée sans préfixe, ou bien précédée de !!:The GO command may be used without preface, or preceded by !!:

  • L’éditeur de requête du Moteur de base de donnéesDatabase Engine prend en charge les variables d’environnement et les variables définies dans un script SQLCMD, mais il ne prend pas en charge les variables SQLCMD intégrées ni les variables osql .The Moteur de base de donnéesDatabase 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. Le traitement SQLCMD de SQL Server Management StudioSQL Server Management Studio respecte la casse pour les variables.SQLCMD processing by SQL Server Management StudioSQL Server Management Studio is case sensitive for variables. Par exemple, PRINT '$ (COMPUTERNAME)' génère le bon résultat et PRINT '$ (ComputerName)' retourne une erreur.For example, PRINT '$(COMPUTERNAME)' produces the correct result, but PRINT '$(ComputerName)' returns an error.

Attention

SQL Server Management StudioSQL Server Management Studio utilise MicrosoftMicrosoft .NET Framework.NET FrameworkSqlClient pour les exécutions en mode normal et SQLCMD. uses MicrosoftMicrosoft .NET Framework.NET FrameworkSqlClient for execution in regular and SQLCMD mode. Lorsqu'il est exécuté à partir de la ligne de commande, SQLCMD utilise le fournisseur OLE DB.When run from the command line, SQLCMD uses the OLE DB provider. Dans la mesure où des options par défaut peuvent s'appliquer, il est possible d'obtenir un comportement différent pendant l'exécution de la même requête en mode SQLCMD SQL Server Management StudioSQL Server Management Studio et dans l'utilitaire SQLCMD.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.

Syntaxe SQLCMD prise en chargeSupported SQLCMD Syntax

L'éditeur de requête du Moteur de base de donnéesDatabase Engine prend en charge les mots clés de script SQLCMD suivants :The Moteur de base de donnéesDatabase 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

Note

Pour :error et :out, stderr et stdout envoient la sortie dans l'onglet des messages.For both :error and :out, stderr and stdout send output to the messages tab.

Les commandes SQLCMD qui ne sont pas répertoriées ci-dessus ne sont pas prises en charge dans l'Éditeur de requête.SQLCMD commands not listed above are not supported in Query Editor. Quand un script contenant des mots clés SQLCMD non pris en charge est exécuté, l’éditeur de requête envoie un message « Commande <commande ignorée> ignorée » à la destination pour chaque mot clé non pris en charge.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. Le script s'exécute correctement mais les commandes non prises en charge sont ignorées.The script will execute successfully, but the unsupported commands will be ignored.

Attention

Étant donné que vous ne démarrez pas SQLCMD à partir de la ligne de commande, l'exécution de l'Éditeur de requête en mode SQLCMD est quelque peu limitée.Because you are not starting SQLCMD from the command line, there are some limitations when running Query Editor in SQLCMD Mode. Vous ne pouvez pas transmettre des paramètres de ligne de commande tels que des variables, et, comme l'éditeur de requête n'a pas la possibilité de répondre aux invites du système d'exploitation, vous ne devez pas exécuter d'instructions interactives.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.

Codage en couleurs dans les scripts SQLCMDColor Coding in SQLCMD Scripts

Lorsque les scripts SQLCMD sont activés, les scripts sont codés en couleurs.With SQLCMD scripting enabled, scripts will be color coded. Le codage en couleurs des mots clés Transact-SQLTransact-SQL reste inchangé.The color coding for Transact-SQLTransact-SQL keywords will remain the same. Les commandes SQLCMD sont présentées avec un arrière-plan ombré.SQLCMD commands are presented with a shaded background.

ExempleExample

L’exemple ci-après utilise une instruction sqlcmd pour créer un fichier de sortie nommé testoutput.txt et exécute deux instructions SELECT Transact-SQLTransact-SQL ainsi qu’une commande du système d’exploitation (pour imprimer le répertoire actuel).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). Le fichier résultant contient la sortie du message provenant de l'instruction DIR , suivie des résultats des instructions Transact-SQLTransact-SQL .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  

Voir aussiSee Also

sqlcmd Utilitysqlcmd Utility