Partager via


Commandes dans l’utilitaire sqlcmd

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics 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
  • [:]ED 1
  • :Out
  • [:]!!
  • :Perftrace
  • [:]QUIT
  • :Connect
  • [:]EXIT
  • :On Error
  • :r
  • :Help
  • :ServerList 1
  • :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 -l définit la variable SQLCMDLOGINTIMEOUTsqlcmd.
  • 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 :

  • :EXIT

    N’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 (pour mandatory) 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 (pour optional) est la valeur par défaut.

    Value Description
    -Ns Strict
    -Nm (valeur par défaut) Obligatoire
    -No Optional
  • 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
    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 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