Modifier des scripts SQLCMD à l'aide de l'Éditeur de requête

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Avec l’Éditeur de requête du Moteur de base de données dans SQL Server Management Studio, vous pouvez écrire et modifier des requêtes en tant que scripts SQLCMD. Vous utilisez des scripts SQLCMD lors du traitement de commandes système Windows et des instructions Transact-SQL dans le même script.

Mode SQLCMD

Pour utiliser l'éditeur de requête du Moteur de base de données moteur de base de données afin d'écrire ou de modifier des scripts SQLCMD, vous devez activer le mode de script SQLCMD. Par défaut, le mode SQLCMD n’est pas autorisé dans l’Éditeur de requête. Vous pouvez activer le mode de script en sélectionnant l’icône Mode SQLCMD dans la barre d’outils ou en sélectionnant Mode SQLCMD dans le menu Requête.

Notes

L’activation du mode SQLCMD désactive IntelliSense et le débogueur Transact-SQL dans l’éditeur de requête du Moteur de base de données.

Dans l’Éditeur de requête, les scripts SQLCMD peuvent utiliser les mêmes fonctionnalités que tous les scripts Transact-SQL . Ces fonctionnalités incluent les suivantes :

  • Coloration syntaxique
  • Exécution des scripts
  • Contrôle de code source
  • Analyse des scripts
  • Showplan

Activation des scripts SQLCMD dans l’Éditeur de requête

Pour activer les scripts SQLCMD pour une fenêtre active de l’Éditeur de requête du Moteur de base de données moteur de base de données, utilisez la procédure suivante.

Basculer une fenêtre de l’Éditeur de requête du Moteur de base de données en mode SQLCMD

  1. Dans l’Explorateur d’objets, cliquez avec le bouton droit sur le serveur et sélectionnez Nouvelle requête pour ouvrir une nouvelle fenêtre de l’Éditeur de requête du Moteur de base de données.

  2. Dans le menu Requête, sélectionnez Mode SQLCMD.

    L’Éditeur de requête exécute les instructions SQLCMD dans son contexte.

  3. Dans la barre d'outils Éditeur SQL , dans la liste Bases de données disponibles , sélectionnez AdventureWorks2022.

  4. Dans la fenêtre de l’Éditeur de requête, tapez les instructions Transact-SQL suivantes et l’instruction SQLCMD !!DIR :

    SELECT DISTINCT Type FROM Sales.SpecialOffer;
    GO
    !!DIR
    GO
    SELECT ProductCategoryID, Name FROM Production.ProductCategory;
    GO
    
  5. Appuyez sur F5 pour exécuter la section d’instructions Transact-SQL et MS-DOS.

    Consultez les deux volets de résultats SQL générés par la première et la troisième instruction.

  6. Dans le volet Résultats, sélectionnez l’onglet Messages pour afficher les messages des trois instructions :

    • (6 lignes affectées)
    • <Informations sur le répertoire>
    • (4 lignes affectées)

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. Lorsque vous utilisez l'Éditeur de requête en Mode SQLCMD, vous devez veiller à ne pas exécuter d'instructions interactives. L'Éditeur de requêtes ne peut pas répondre aux invites du système d'exploitation.

Pour plus d’informations sur l'exécution de SQLCMD, consultez Utilitaire sqlcmd ou suivez le didacticiel SQLCMD.

Activation des scripts SQLCMD par défaut

Pour activer les scripts SQLCMD par défaut, dans le menu Outils, sélectionnez Options, développez Exécution de la requête et SQL Server, sélectionnez la page Général, puis cochez la case Par défaut, ouvrir les nouvelles requêtes en mode SQLCMD.

Écrire et modifier des scripts SQLCMD

Une fois le mode de scripts activé, vous pouvez écrire des commandes SQLCMD et des instructions Transact-SQL. Les règles suivantes s’appliquent :

  • Les commandes SQLCMD doivent être la première instruction d'une ligne.

  • Une seule commande SQLCMD est autorisée par ligne.

  • Les commandes SQLCMD peuvent être précédées de commentaires ou d'espaces.

  • Les commandes SQLCMD placées entre des caractères de commentaires ne sont pas exécutées.

  • Les caractères de commentaire sur une seule ligne sont deux tirets (--) qui doivent être placés au début d’une ligne.

  • Les commandes du système d'exploitation doivent être précédées de deux points d'exclamation (!!). 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 . 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 !!>".

  • Pour distinguer clairement les commandes SQLCMD des commandes Transact-SQL, toutes les commandes SQLCMD doivent être précédées d’un symbole deux-points (:).

  • La commande GO peut être utilisée sans préfixe, ou bien précédée de !!:

  • L’Éditeur de requête du Moteur de base de données 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. Le traitement SQLCMD de SQL Server Management Studio respecte la casse pour les variables. Par exemple, PRINT '$ (COMPUTERNAME)' génère le bon résultat et PRINT '$ (ComputerName)' retourne une erreur.

Attention

SQL Server Management Studio utilise Microsoft.NET FrameworkSqlClient pour les exécutions en mode normal et SQLCMD. Lorsqu'il est exécuté à partir de la ligne de commande, SQLCMD utilise le fournisseur OLE DB. 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 Studio et dans l’utilitaire SQLCMD.

Syntaxe SQLCMD prise en charge

L'éditeur de requête du Moteur de base de données prend en charge les mots clés de script SQLCMD suivants :

  • [!!:]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

Notes

Envoyez la sortie vers l’onglet des messages pour :error et :out, stderr et stdout.

Les commandes SQLCMD qui ne sont pas répertoriées ci-dessus ne sont pas prises en charge dans l’Éditeur de requête. 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. Le script s'exécute correctement mais les commandes non prises en charge sont ignorées.

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. Vous ne pouvez pas transmettre des paramètres de ligne de commande tels que des variables, et, comme l’Éditeur de requête ne peut pas répondre aux invites du système d’exploitation, vous ne devez pas exécuter d’instructions interactives.

Codage en couleurs dans les scripts SQLCMD

Lorsque les scripts SQLCMD sont activés, les scripts sont codés en couleurs. Le codage en couleurs des mots clés Transact-SQL reste inchangé. Les commandes SQLCMD sont présentées avec un arrière-plan ombré.

Exemple

L’exemple suivant utilise une instruction SQLCMD pour créer un fichier de sortie nommé testoutput.txt, et exécute deux instructions SELECT Transact-SQL ainsi qu’une commande du système d’exploitation (pour imprimer le répertoire actuel). Le fichier résultant contient la sortie du message provenant de l’instruction DIR et la sortie des résultats des instructions Transact-SQL.

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

Étapes suivantes