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.
S’applique à :SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Base de données SQL dans Microsoft Fabric
L’utilitaire sqlcmd vous permet d’entrer des instructions Transact-SQL, des procédures système et des fichiers de script.
Note
Pour connaître la variante et la version de sqlcmd installées sur votre système, consultez Vérifier la version installée de l’utilitaire sqlcmd. Pour plus d’informations sur l’obtention de sqlcmd, consultez Télécharger et installer l’utilitaire sqlcmd.
En complément des instructions Transact-SQL dans sqlcmd, vous pouvez également utiliser les commandes suivantes :
GO [ <count> ]:List[:]RESET:Error-
[:]ED1 :Out[:]!!:Perftrace[:]QUIT:Connect[:]EXIT:On Error:r:Help-
:ServerList1 -
:XML [ ON | OFF ]1 :Setvar:Listvar
1 Non pris en charge sur Linux ou macOS.
Tenez compte des éléments suivants lorsque vous utilisez des commandes sqlcmd :
Toutes les commandes sqlcmd, à l'exception de
GO, doivent être précédées d'un signe deux-points (:).Important
Pour assurer la compatibilité descendante avec les scripts osql existants, certaines commandes sont reconnues sans les deux-points. Elles sont indiquées par
:.Les commandessqlcmd ne sont reconnues que si elles apparaissent au début d'une ligne.
Toutes les commandes sqlcmd ne respectent pas la casse.
Chaque commande doit figurer sur une ligne séparée. Une commande ne peut pas être suivie d'une instruction Transact-SQL ou d'une autre commande.
Les commandes sont exécutées immédiatement. Elles ne sont pas placées dans le tampon d'exécution comme le sont les instructions Transact-SQL.
Modification des commandes
[:]ED
Démarre l'éditeur de texte. Cet éditeur peut être utilisé pour modifier le lot Transact-SQL actif ou le dernier lot exécuté. Pour modifier le dernier traitement exécuté, la commande ED doit être tapée immédiatement après la fin de l'exécution du dernier traitement.
L'éditeur de texte est défini par la variable d'environnement SQLCMDEDITOR. L'éditeur par défaut est Edit. Pour changer d'éditeur, définissez la variable d'environnement SQLCMDEDITOR. Par exemple, pour choisir l'éditeur Bloc-notes de Microsoft, à l'invite de commandes, tapez :
SET SQLCMDEDITOR=notepad
[:]RESET
Vide le cache d'instruction.
:List
Imprime le contenu du cache de déclaration.
Variables
:Setvar <var> [ "valeur" ]
Définit les variables de script sqlcmd . Les variables de script possèdent le format suivant : $(VARNAME).
Les noms de variable ne respectent pas la casse.
Les variables de script peuvent être définies comme suit :
- Utilisation implicite d'une option de ligne de commande. Par exemple, l'option
-ldéfinit la variableSQLCMDLOGINTIMEOUTsqlcmd. - Explicitement à l'aide de la commande
:Setvar. - Définition d’une variable d’environnement avant d’exécuter sqlcmd.
Note
L'option -X empêche le passage des variables d'environnement à sqlcmd.
Si une variable définie à l'aide de :Setvar et une variable d'environnement possèdent le même nom, la variable définie à l'aide de :Setvar est prioritaire.
Les noms de variable ne doivent pas contenir de caractères espace.
Les noms de variables ne peuvent pas avoir la même forme qu'une expression variable telle que $(var).
Si une valeur de chaîne de la variable de script contient des espaces, placez la valeur entre guillemets. Si aucune valeur n'est spécifiée pour une variable de script, cette dernière est supprimée.
:Listvar
Affiche la liste des variables de script actuellement définies.
Note
Seules les variables de script définies par sqlcmd et les variables définies à l’aide de la :Setvar commande s’affichent.
Commandes de sortie
:Error <nom_fichier> | STDERR | STDOUT
Redirige l'ensemble de la sortie d'erreur vers le fichier spécifié par nom_fichier vers stderr ou stdout. La commande :Error peut apparaître plusieurs fois dans un script. Par défaut, la sortie d'erreur est envoyée à stderr.
filename
Crée et ouvre un fichier qui reçoit la sortie. Si le fichier existe déjà, il est tronqué à zéro octet. Si le fichier n'est pas disponible car des autorisations sont requises, ou pour d'autres raisons, la sortie n'est pas modifiée et est envoyée à la dernière destination spécifiée ou à celle par défaut.
STDERR
Bascule la sortie d’erreur vers le flux de
stderr. Si la sortie a été redirigée, la cible vers laquelle le flux est redirigé reçoit la sortie d’erreur.STDOUT
Bascule la sortie d’erreur vers le flux de
stdout. Si la sortie a été redirigée, la cible vers laquelle le flux est redirigé reçoit la sortie d’erreur.
:Out <nom_fichier> | STDERR | STDOUT
Crée et redirige l'ensemble des résultats de requête dans le fichier spécifié par nom_fichiervers stderr ou vers stdout. Par défaut, la sortie est envoyée à stdout. Si le fichier existe déjà, il est tronqué à zéro octet. La commande :Out peut apparaître plusieurs fois dans un script.
:Perftrace <nom de fichier> | STDERR | STDOUT
Crée et redirige l'ensemble des informations de traces de performances dans le fichier spécifié par nom_fichiervers stderr ou vers stdout. Par défaut, la sortie de traces de performances est envoyée à stdout. Si le fichier existe déjà, il est tronqué à zéro octet. La commande :Perftrace peut apparaître plusieurs fois dans un script.
Commandes de contrôle d'exécution
:En cas d'erreur [ sortir | ignorer ]
Définit l'action à effectuer lorsqu'une erreur se produit en cours de script ou d'exécution d'un traitement.
Quand l'option exit est utilisée, sqlcmd se termine avec la valeur d'erreur appropriée.
Quand l'option ignore est utilisée, sqlcmd ignore l'erreur et continue d'exécuter le lot ou le script. Par défaut, un message d'erreur est imprimé.
[:]QUIT
Entraîne la fermeture de sqlcmd .
[:]EXIT [ ( déclaration ) ]
Vous permet d'utiliser le résultat d'une instruction SELECT comme valeur de retour de sqlcmd. S'il est numérique, la première colonne de la dernière ligne de résultats est convertie en un entier de 4 octets (entier long). MS-DOS, Linux et macOS passent l’octet faible au processus parent ou au niveau erreur du système d’exploitation. Windows 2000 et versions ultérieures transmettent un entier de 4 octets dans sa totalité. La syntaxe est :EXIT(query).
Par exemple:
:EXIT(SELECT @@ROWCOUNT)
Vous pouvez également inclure le paramètre :EXIT dans un fichier de commandes. Par exemple, à l'invite de commandes, tapez :
sqlcmd -Q ":EXIT(SELECT COUNT(*) FROM '%1')"
L'utilitaire sqlcmd envoie tout le contenu entre parenthèses (()) au serveur. Si une procédure stockée système sélectionne un ensemble et retourne une valeur, seule la sélection est retournée. L'instruction :EXIT() sans information entre parenthèses exécute tout ce qui la précède dans le lot, puis se termine sans valeur de retour.
Quand une requête incorrecte est spécifiée, sqlcmd se termine sans valeur de retour.
Voici une liste de formats EXIT :
:EXITN’exécute pas le lot, puis se termine immédiatement sans retourner de valeur.
:EXIT( )Exécute le traitement, puis quitte sans retourner de valeur.
:EXIT(query)Exécute le traitement qui inclut la requête, puis se termine après avoir retourné les résultats de la requête.
Si RAISERROR est utilisé dans un script sqlcmd et qu'un état de 127 est soulevé, sqlcmd se termine et renvoie l'ID du message au client. Par exemple:
RAISERROR(50001, 10, 127)
Cette erreur entraîne l'arrêt du script sqlcmd et retourne l'ID de message 50001 au client.
Les valeurs de retour, de -1 à -99, sont réservées par SQL Server et sqlcmd définit les valeurs de retour supplémentaires suivantes :
| Valeur retournée | Description |
|---|---|
-100 |
Erreur rencontrée avant de sélectionner la valeur de retour. |
-101 |
Aucune ligne trouvée lors de la sélection d'une valeur de retour. |
-102 |
Erreur de conversion survenue lors de la sélection d'une valeur retournée. |
GO [count]
GO signale à la fois la fin d'un lot et l'exécution des instructions Transact-SQL mises en cache. Le lot est exécuté plusieurs fois par lots distincts. Vous ne pouvez pas déclarer une variable plusieurs fois dans un même lot.
Commandes diverses
:r <nom_fichier>
Analyse les instructions Transact-SQL et les commandes sqlcmd supplémentaires du fichier spécifié par nom_fichier dans le cache des instructions. filename est lu par rapport au répertoire de démarrage dans lequel sqlcmd a été exécuté.
Si le fichier contient des instructions Transact-SQL qui ne sont pas suivies par GO, vous devez entrer GO sur la ligne qui suit :r.
Le fichier est lu et exécuté après la rencontre d’un terminateur de traitement. Vous pouvez émettre plusieurs commandes :r . Le fichier peut inclure n’importe quelle commande sqlcmd, y compris la marque de fin de lot GO.
Note
Le nombre de lignes affiché en mode interactif est augmenté par un pour chaque :r commande rencontrée. La commande :r apparaît dans la sortie de la commande de liste.
:ServerList
Répertorie tous les serveurs configurés localement et les noms des serveurs émettant sur le réseau.
:Connect nom_serveur[\nom_instance] [-l délai_expiration] [-U nom_utilisateur [-P mot_de_passe]]
Établit une connexion à une instance de SQL Server. Ferme également la connexion actuelle.
Options de délai d’expiration :
| Value | Behavior |
|---|---|
0 |
Attendez toujours |
n>0 |
Attendre n secondes |
La variable de script SQLCMDSERVER reflète la connexion active actuelle.
Si délai_expiration n'est pas spécifié, la valeur de la variable SQLCMDLOGINTIMEOUT est la valeur par défaut.
Si seulement nom_utilisateur est spécifié (en tant qu'option ou en tant que variable d'environnement), , l'utilisateur est invité à entrer un mot de passe. Les utilisateurs ne sont pas invités si les variables d'environnement SQLCMDUSER ou SQLCMDPASSWORD sont définies. Si ni les options ni les variables d'environnement ne sont fournies, le mode d'authentification Windows est employé pour se connecter. Par exemple, pour établir une connexion à une instance instance1 de SQL Server myserver à l'aide de la sécurité intégrée, utilisez la commande suivante :
:connect myserver\instance1
Pour établir une connexion à l'instance par défaut de myserver en utilisant des variables de script, utilisez les paramètres suivants :
:setvar myusername test
:setvar myservername myserver
:connect $(myservername) $(myusername)
[:]!! command
Exécute des commandes du système d'exploitation. Pour exécuter une commande du système d'exploitation, commencez une ligne par deux points d'exclamation ( !! ) suivis de la commande du système d'exploitation. Par exemple:
:!! dir
Note
La commande est exécutée sur l'ordinateur sur lequel sqlcmd s'exécute.
:XML [ ACTIVÉ | DÉSACTIVÉ ]
Pour plus d'informations, consultez Format de sortie XML et Format de sortie JSON dans cet article.
:Help
Liste les commandes sqlcmd avec une brève description de chaque commande.
Noms de fichiers sqlcmd
Les fichiers d'entréesqlcmd peuvent être spécifiés avec l'option -i ou la commande :r. Les fichiers de sortie peuvent être spécifiés avec l’option -o ou les commandes :Error, :Out, et :Perftrace. Voici quelques consignes relatives à l'utilisation de ces fichiers :
:Error,:Outet:Perftracedoit utiliser des valeurs de nom de fichier distinctes. Si le même nom de fichier est utilisé, les entrées des commandes peuvent être mélangées.Si un fichier d'entrée situé sur un serveur distant est appelé à partir de sqlcmd sur un ordinateur local et que le fichier contient un chemin de fichier sur un lecteur tel que
:Out c:\OutputFile.txt, le fichier de sortie est créé sur l'ordinateur local et non sur le serveur distant.Les chemins d'accès de fichier valides sont les suivants :
C:\<filename>,\\<Server>\<Share$>\<filename>et"C:\Some Folder\<file name>". Si le chemin d'accès comporte un espace, utilisez des guillemets.Chaque nouvelle session sqlcmd remplace les fichiers existants qui ont des noms identiques.
Messages d’information
sqlcmd imprime les messages d'information envoyés par le serveur. Dans l'exemple suivant, une fois que les instructions Transact-SQL sont exécutées, un message d'information est affiché.
Démarrez sqlcmd. Dans l'invite de commandes sqlcmd, tapez la requête :
USE AdventureWorks2022;
GO
Lorsque vous appuyez sur ENTRÉE, le message d'information suivant s'affiche :
Changed database context to 'AdventureWorks2022'.
Format de sortie des requêtes Transact-SQL
sqlcmd imprime tout d'abord un en-tête de colonne qui contient les noms de colonne spécifiés dans la liste de sélection. Les noms de colonne sont séparés à l'aide du caractère SQLCMDCOLSEP. Par défaut, ce séparateur de colonne est un espace. Si le nom de colonne est plus court que la largeur de colonne, la sortie est complétée avec des espaces jusqu'à la colonne suivante.
Cette ligne est suivie d’un séparateur de ligne qui correspond à une série de tirets. La sortie suivante constitue un exemple.
Démarrez sqlcmd. Dans l'invite de commandes sqlcmd, tapez la requête :
USE AdventureWorks2022;
SELECT TOP (2) BusinessEntityID,
FirstName,
LastName
FROM Person.Person;
GO
Quand vous appuyez sur Entrée, le jeu de résultats suivant est retourné.
BusinessEntityID FirstName LastName
---------------- ------------ ----------
285 Syed Abbas
293 Catherine Abel
(2 row(s) affected)
Bien que la BusinessEntityID colonne ne soit que quatre caractères larges, elle s’étend pour prendre en charge le nom de colonne plus long. Par défaut, la sortie se termine à 80 caractères. Cette largeur peut être modifié en utilisant l'option -w ou en définissant la variable de script SQLCMDCOLWIDTH.
format de sortie XML
La sortie XML qui est le résultat d'une clause FOR XML est générée, sans mise en forme, dans un flux continu.
Lorsque vous attendez une sortie XML, utilisez la commande suivante : :XML ON.
Note
sqlcmd retourne des messages d'erreur au format habituel. Les messages d'erreur sont également générés en sortie dans le flux de texte XML au format XML. Avec :XML ON, sqlcmd n’affiche aucun message d’information.
Pour désactiver le mode XML, utilisez la commande suivante : :XML OFF.
La commande GO ne doit pas apparaître avant l'émission de la commande :XML OFF, car la commande :XML OFF remet sqlcmd en sortie orientée ligne.
Les données XML (diffusées en continu) et les données d'ensemble de lignes ne peuvent être mélangées. Si la :XML ON commande n’a pas été émise avant qu’une instruction Transact-SQL qui génère des flux XML soit exécutée, la sortie est brouilée. Une fois la :XML ON commande émise, vous ne pouvez pas exécuter d’instructions Transact-SQL qui génèrent des jeux de lignes standard.
Note
La commande :XML ne prend pas en charge l’instruction SET STATISTICS XML.
Format de sortie JSON
Lorsque vous attendez une sortie JSON, utilisez la commande suivante : :XML ON. Sinon, la sortie inclut à la fois le nom de la colonne et le texte JSON. Cette sortie n'est pas un format JSON valide.
Pour désactiver le mode XML, utilisez la commande suivante : :XML OFF.
Pour plus d'informations, voir Format de sortie XML dans cet article.
Utiliser l’authentification Microsoft Entra
Exemples utilisant l’authentification Microsoft Entra :
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net -G -l 30
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net -G -U bob@contoso.com -P MyAzureADPassword -l 30
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net -G -l 30
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net -G -U bob@contoso.com -P MyAzureADPassword -l 30
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net -G -l 30
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net -G -U bob@contoso.com -P MyAzureADPassword -l 30