Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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 accepte Transact-SQL instructions, procédures système et 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.
Outre les instructions Transact-SQL dans sqlcmd, utilisez 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.
Gardez à l’esprit les points suivants lorsque vous utilisez des commandes sqlcmd :
Toutes les commandes sqlcmd , à l’exception
GOde celles-ci, doivent commencer par un signe deux-points (:).Important
Pour maintenir la compatibilité descendante avec les scripts osql existants, certaines commandes fonctionnent sans le signe deux-points (indiqué par
[:]).sqlcmd reconnaît les commandes uniquement 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. Vous ne pouvez pas suivre une commande avec une instruction Transact-SQL ou une autre commande.
Les commandes s’exécutent 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. Utilisez cet éditeur pour modifier le lot Transact-SQL actuel ou le dernier lot exécuté. Pour modifier le dernier lot d’exécution, tapez la ED commande immédiatement après la fin de l’exécution du dernier lot.
La SQLCMDEDITOR variable d’environnement définit l’éditeur de texte. L'éditeur par défaut est Edit. Pour changer d'éditeur, définissez la variable d'environnement SQLCMDEDITOR. Par exemple, pour définir l’éditeur sur le Bloc-notes Microsoft, tapez la commande suivante :
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
Redirigez toutes les sorties d’erreur vers le fichier spécifié par nom de fichier, vers stderrou vers stdout. La commande :Error peut apparaître plusieurs fois dans un script. Par défaut, la sortie d’erreur passe à stderr.
filename
Crée et ouvre un fichier qui reçoit la sortie. Un fichier existant est tronqué à zéro octets. Si le fichier n’est pas disponible en raison d’autorisations ou d’autres raisons, la sortie n’est pas redirigée, et la dernière destination spécifiée ou par défaut reçoit la sortie d’erreur.
STDERR
Bascule la sortie d’erreur vers le flux de
stderr. Si la sortie est 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 est 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 tous les résultats de requête vers le fichier spécifié par nom de fichier, vers stderrou vers stdout. Par défaut, la sortie passe à 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 toutes les informations de suivi des performances vers le fichier spécifié par nom de fichier, vers stderrou vers .stdout Par défaut, la sortie du suivi des performances passe à stdout. Un fichier existant est tronqué à zéro octets. 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 pendant l’exécution du script ou du lot.
Lorsque vous utilisez l’option exit , sqlcmd se ferme avec la valeur d’erreur appropriée.
Lorsque vous utilisez l’option ignore , sqlcmd ignore l’erreur et continue d’exécuter le lot ou le script. Par défaut, sqlcmd imprime un message d’erreur.
[:]QUIT
Entraîne la fermeture de sqlcmd .
[:]EXIT [ ( déclaration ) ]
Utilisez le résultat d’une SELECT instruction 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 passent le nombre entier de 4 octets. 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 parenthèses exécute tout ce qui précède dans le lot, puis se termine sans valeur de retour.
Lorsque vous spécifiez une requête incorrecte, sqlcmd se ferme sans valeur de retour.
Voici une liste de formats EXIT :
:EXITN’exécute pas le lot, puis quitte immédiatement et ne retourne aucune valeur.
:EXIT( )Exécute le lot, puis quitte et ne retourne aucune valeur.
:EXIT(query)Exécute le lot qui inclut la requête, puis se termine après avoir retourné les résultats de la requête.
Si vous utilisez RAISERROR dans un script sqlcmd et déclenchez un état de 127, sqlcmd se ferme et renvoie l’ID de 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 des valeurs de retour supplémentaires :
| 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 en tant que lots distincts. Vous ne pouvez pas déclarer une variable plusieurs fois dans un même lot.
Commandes diverses
:r <nom_fichier>
Analyse des instructions Transact-SQL supplémentaires et des commandes sqlcmd à partir du fichier spécifié par nom de fichier dans le cache d’instructions. sqlcmd lit le nom de fichier par rapport au répertoire de démarrage.
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.
sqlcmd lit et exécute le fichier une fois qu’il rencontre un marqueur de fin de lot. 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 qui s’affiche en mode interactif augmente d’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 server_name[\instance_name] [-l timeout] [-U user_name [-P password]] [-N[s|m|o]] [-F hostname_in_certificate]
Établit une connexion à une instance de SQL Server. Ferme également la connexion actuelle.
Important
La :Connect commande ne fait pas office de séparateur de lots implicite. Les instructions Transact-SQL mises en mémoire tampon dans le lot actuel ne sont pas exécutées tant qu’une commande GO n’est pas émise. Si vous utilisez plusieurs :Connect commandes sans instructions intermédiaires GO , toutes les instructions mises en mémoire tampon s’exécutent sur le dernier serveur connecté, et non sur chaque serveur individuellement.
Options de chiffrement (
-N[s|m|o]) :Utilisez cette option pour demander une connexion chiffrée. Si vous n’incluez
-Npas ,-Nm(pourmandatory) est la valeur par défaut. Cette option est un changement cassant de SQL Server 2022 (16.x) et des versions antérieures, où-No(pouroptional) est la valeur par défaut.Value Description -NsStrict -Nm(valeur par défaut)Obligatoire -NoOptional Nom d’hôte dans le certificat (
-F hostname_in_certificate)Spécifie un autre nom commun attendu (CN) ou un autre nom de l’objet (SAN) dans le certificat de serveur à utiliser lors de la validation du certificat de serveur. Sans cette option, la validation de certificat garantit que le CN ou le SAN dans le certificat correspond au nom du serveur auquel vous vous connectez. Ce paramètre peut être renseigné lorsque le nom du serveur ne correspond pas au cn ou au réseau SAN, par exemple lors de l’utilisation d’alias DNS.
Options de délai d’expiration :
Value Behavior 0Attendez toujours n>0Attendre n secondes La variable de script
SQLCMDSERVERreflète la connexion active actuelle.Si délai_expiration n'est pas spécifié, la valeur de la variable
SQLCMDLOGINTIMEOUTest la valeur par défaut.
Si vous spécifiez uniquement user_name (en tant qu’option ou en tant que variable d’environnement), sqlcmd vous invite à 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 vous connecter à 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 les commandes du système d’exploitation. Pour exécuter une commande de système d’exploitation, démarrez une ligne avec deux points d’exclamation (!!) suivis de la commande du système d’exploitation. Par exemple:
:!! dir
Note
La commande s’exécute 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
Répertorie les commandes sqlcmd , ainsi qu’une brève description de chaque commande.
Noms de fichiers sqlcmd
Spécifiez des fichiers d’entrée sqlcmd à l’aide de l’option -i ou de la :r commande. Spécifiez des fichiers de sortie à l’aide de l’option -o ou des commandes :Error, :Out, et :Perftrace. Lorsque vous utilisez ces fichiers, suivez les instructions suivantes :
Utilisez des valeurs de nom de fichier distinctes pour
:Error,:Outet:Perftrace. Si vous utilisez le même nom de fichier, les commandes peuvent mélanger les entrées.Si vous appelez un fichier d’entrée situé sur un serveur distant à partir de sqlcmd sur un ordinateur local, et que le fichier contient un chemin d’accès de fichier de lecteur tel que
:Out c:\OutputFile.txt, sqlcmd crée le fichier de sortie 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 tout message d’information envoyé par le serveur. Dans l’exemple suivant, une fois sqlcmd exécuté les instructions Transact-SQL, il imprime un message d’information.
Démarrez sqlcmd. Dans l'invite de commandes sqlcmd, tapez la requête :
USE AdventureWorks2025;
GO
Lorsque vous appuyez sur Entrée, sqlcmd imprime le message d’information suivant :
Changed database context to 'AdventureWorks2025'.
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, sqlcmd place la sortie avec des espaces jusqu’à la colonne suivante.
sqlcmd imprime une ligne de séparateur composée d'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 AdventureWorks2025;
SELECT TOP (2) BusinessEntityID,
FirstName,
LastName
FROM Person.Person;
GO
Lorsque vous appuyez sur Entrée, sqlcmd retourne le jeu de résultats suivant.
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, sqlcmd met fin à la sortie à 80 caractères. Vous pouvez modifier cette largeur à l’aide de l’option -w ou en définissant la SQLCMDCOLWIDTH variable de script.
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 Transact-SQL instructions 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 qui utilisent 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