Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier les répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer de répertoire.
Utilisez l’éditeur de requête dans SQL Server Management Studio (SSMS) pour écrire et modifier des requêtes en tant que scripts SQLCMD. Vous pouvez utiliser des scripts SQLCMD pour traiter les commandes système Windows et les instructions Transact-SQL dans le même script.
Activer le mode SQLCMD
Pour utiliser l’éditeur de requête pour écrire ou modifier des scripts SQLCMD, vous devez activer le mode de script SQLCMD. Le mode SQLCMD n’est pas activé par défaut. Vous pouvez activer le mode de script en sélectionnant l’icône mode SQLCMD dans la barre d’outils ou en sélectionnant le mode SQLCMD dans le menu Requête .
Note
Lorsque vous activez le mode SQLCMD, IntelliSense et le débogueur Transact-SQL sont désactivés dans l’éditeur de requête.
Les scripts SQLCMD dans l’éditeur de requête peuvent utiliser les mêmes fonctionnalités que toutes les Transact-SQL scripts utilisent. Ces fonctionnalités sont les suivantes :
- Codage couleur
- Exécution des scripts
- Gestion des sources
- Analyse des scripts
- Plan d’exécution
Activation des scripts SQLCMD dans l’Éditeur de requête
Pour activer le script SQLCMD pour une fenêtre d’éditeur de requête active, procédez comme suit.
Basculer une fenêtre de l’éditeur de requête en mode SQLCMD
Dans l’Explorateur d’objets, cliquez avec le bouton droit sur le serveur, puis sélectionnez Nouvelle requête pour ouvrir une nouvelle fenêtre éditeur de requête.
Dans le menu Requête, sélectionnez Mode SQLCMD.
Les instructions SQLCMD sont exécutées dans le contexte de l’éditeur de requête.
Dans la barre d'outils Éditeur SQL , dans la liste Bases de données disponibles , sélectionnez
AdventureWorks2025.Dans la fenêtre de l’éditeur de requête, tapez les instructions Transact-SQL suivantes et l’instruction
!!DIRSQLCMD :SELECT DISTINCT Type FROM Sales.SpecialOffer; GO !!DIR GO SELECT ProductCategoryID, Name FROM Production.ProductCategory; GOAppuyez sur F5 pour exécuter la section d'instructions Transact-SQL et MS-DOS mélangées.
Consultez les deux volets de résultats SQL générés par la première et la troisième instruction.
Dans le volet Résultats, sélectionnez l’onglet Messages pour afficher les messages des trois instructions :
(6 row(s) affected)<The directory information>(4 row(s) affected)
Important
Lorsque vous exécutez sqlcmd à partir de la ligne de commande, il permet une interaction complète avec le système d’exploitation. Lorsque vous utilisez l’éditeur de requête en mode SQLCMD, veillez à ne pas exécuter d’instructions interactives. L'éditeur de requêtes ne répond pas aux demandes du système d'exploitation. Pour plus d’informations sur l’exécution de SQLCMD à partir de la ligne de commande, consultez l’utilitaire 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
Après avoir activé le mode de script, vous pouvez écrire à la fois 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.
Vous pouvez utiliser des commentaires et des espaces blancs devant les commandes SQLCMD.
Les commandes SQLCMD placées entre des caractères de commentaires ne sont pas exécutées.
Les caractères de commentaire à une seule ligne sont deux traits d’union (
--) et doivent apparaître au début d’une ligne.Préfixez les commandes du système d’exploitation par deux points d’exclamation (
!!). La commande utilisant les deux points d'exclamation entraîne l’exécution de l’instruction qui suit ces points d'exclamation avec l'interpréteur de commandescmd.exe. Le texte après!!est passé en tant que paramètre àcmd.exe, donc la ligne de commande finale s'exécute comme suit :"%SystemRoot%\system32\cmd.exe /c <text after !!>".Pour faire une distinction claire entre les commandes SQLCMD et Transact-SQL, préfixez toutes les commandes SQLCMD avec un signe deux-points (
:).La
GOcommande peut être utilisée sans préface ou précédée de!!:.L’éditeur de requête prend en charge les variables d’environnement et les variables que vous définissez dans le cadre d’un script SQLCMD, mais elle ne prend pas en charge les variables SQLCMD ou osql intégrées. SSMS traite les variables SQLCMD comme sensibles à la casse. Par exemple,
PRINT '$(COMPUTERNAME)'produit le résultat correct, maisPRINT '$(ComputerName)'retourne une erreur.
Caution
SSMS utilise la SqlClient bibliothèque .NET pour l’exécution en mode normal et SQLCMD. Lorsque vous exécutez la requête à partir de la ligne de commande, sqlcmd utilise le fournisseur OLE DB. Étant donné que différentes options par défaut peuvent s’appliquer, vous pouvez voir un comportement différent lors de l’exécution de la même requête en mode SQLCMD dans SSMS, par rapport au mode SQLCMD dans l’utilitaire sqlcmd .
Syntaxe SQLCMD prise en charge
L’éditeur de requête 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]]1 :on error [ignore|exit]-
:error <filename>|stderr|stdout2 -
:out <filename>|stderr|stdout2
1 Pour plus d’informations sur la :connect commande, consultez Commandes dans l’utilitaire sqlcmd.
2 L’éditeur de requête envoie la sortie à l’onglet Messages pour stderr et stdout.
L’éditeur de requête ne prend pas en charge les commandes SQLCMD qui ne sont pas incluses dans la liste précédente. Lorsque vous exécutez un script qui contient des mots clés SQLCMD non pris en charge, l’éditeur de requête ignore la commande. Pour chaque mot clé non pris en charge, l’éditeur de requête envoie le message suivant à la destination :
Ignoring command <ignored_command>
Caution
Étant donné que vous ne démarrez pas SQLCMD à partir de la ligne de commande, il existe certaines limitations lors de l’exécution de l’Éditeur de requête en mode SQLCMD. Vous ne pouvez pas transmettre des paramètres de ligne de commande tels que des variables. En outre, étant donné que l’éditeur de requête ne peut pas répondre aux invites du système d’exploitation, vous devez être prudent de ne pas exécuter d’instructions interactives.
Codage en couleurs dans les scripts SQLCMD
Lorsque vous activez le script SQLCMD, les scripts sont codés en couleur. Le codage de couleur pour les mots clés Transact-SQL reste le même. Les commandes SQLCMD s’affichent avec un arrière-plan ombré.
Examples
L’exemple suivant utilise une instruction SQLCMD pour créer un fichier de sortie nommé testoutput.txt. Il exécute deux instructions Transact-SQL SELECT et une commande de système d’exploitation qui imprime le répertoire actif. Le fichier résultant contient la sortie du message 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