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 dans différents modes :
- À l’invite de commandes.
- Dans l’Éditeur de requête en mode SQLCMD.
- Dans un fichier de script Windows.
- Dans une étape de travail de système d’exploitation (
cmd.exe) d’un travail SQL Server Agent.
Note
Bien que Microsoft Entra ID soit le nouveau nom d’Azure Active Directory (Azure AD) pour empêcher l’interruption des environnements existants, Azure AD reste toujours dans certains éléments codés en dur, tels que les champs d’interface utilisateur, les fournisseurs de connexions, les codes d’erreur et cmdlets. Dans cet article, les deux noms sont interchangeables.
Variantes de sqlcmd
Il existe deux variantes de sqlcmd :
sqlcmd (Go) : le
go-mssqldbbasé sur , parfois appelé go-sqlcmd. Cette version est un outil autonome que vous pouvez télécharger indépendamment de SQL Server. Il s’exécute sur Windows, macOS, Linux et dans des conteneurs.sqlcmd (ODBC) : le sqlcmd basé sur la plateforme, basé sur ODBC, disponible avec SQL Server ou les utilitaires de ligne de commande Microsoft et une partie du
mssql-toolspackage sur Linux. Il s’exécute également sur Windows, macOS, Linux et dans des conteneurs.
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.
Prise en charge de TDS 8.0
SQL Server 2025 (17.x) introduit la prise en charge de TDS 8.0 pour l’utilitaire sqlcmd .
Syntax
Usage:
sqlcmd [flags]
sqlcmd [command]
Examples:
# Install/Create, Query, Uninstall SQL Server
sqlcmd create mssql --accept-eula --using https://aka.ms/AdventureWorksLT.bak
sqlcmd open ads
sqlcmd query "SELECT @@version"
sqlcmd delete
# View configuration information and connection strings
sqlcmd config view
sqlcmd config cs
Available Commands:
completion Generate the autocompletion script for the specified shell
config Modify sqlconfig files using subcommands like "sqlcmd config use-context mssql"
create Install/Create SQL Server, Azure SQL, and Tools
delete Uninstall/Delete the current context
help Help about any command
open Open tools (e.g ADS) for current context
query Run a query against the current context
start Start current context
stop Stop current context
Flags:
-?, --? help for backwards compatibility flags (-S, -U, -E etc.)
-h, --help help for sqlcmd
--sqlconfig string configuration file (default "/Users/<currentUser>/.sqlcmd/sqlconfig")
--verbosity int log level, error=0, warn=1, info=2, debug=3, trace=4 (default 2)
--version print version of sqlcmd
Use "sqlcmd [command] --help" for more information about a command.
Pour en savoir plus sur la syntaxe et l'utilisation de sqlcmd, reportez-vous à Syntaxe sqlcmd ODBC.
Changements cassants de sqlcmd (ODBC)
Plusieurs interrupteurs et comportements sont modifiés dans l'utilitaire sqlcmd (Go). Pour obtenir la liste la plus récente des indicateurs manquants à des fins de compatibilité descendante, reportez-vous à la discussion GitHub sur les indicateurs de compatibilité descendante à implémenter en priorité.
Dans les versions antérieures de sqlcmd (Go), le commutateur
-Pa été temporairement supprimé et les mots de passe pour l'authentification SQL Server ne peuvent être fournis que par le biais de ces mécanismes :- La variable d'environnement
SQLCMDPASSWORD - La commande
:CONNECT - Lorsque vous y êtes invité, l'utilisateur pourrait saisir le mot de passe pour terminer une connexion
- La variable d'environnement
-rnécessite un argument0ou1Le commutateur
-Rest supprimé.Le commutateur
-Iest supprimé. Pour désactiver le comportement de l'identificateur entre guillemets, ajoutezSET QUOTED IDENTIFIER OFFà vos scripts.-Nprend une valeur de chaîne qui peut être l’un destrue,falseoudisablepour spécifier le choix de chiffrement. (defaultest identique à omettre le paramètre)- Si
-Net-Cne sont pas fournis, sqlcmd négocie l'authentification avec le serveur sans valider le certificat de serveur. - Si
-Nest fourni, mais pas-C, sqlcmd exige la validation du certificat de serveur. Une valeurfalsepour le chiffrement peut toujours entraîner le chiffrement du paquet de connexions. - Si
-Net-Csont fournis, sqlcmd utilise leurs valeurs pour la négociation de chiffrement. - Vous trouverez plus d'informations sur la négociation de chiffrement client/serveur à l'adresse MS-TDS PRELOGIN.
Important
Dans SQL Server 2025 (17.x),
-Npeut êtreo(pouroptional),m(pourmandatory, par défaut) ous(pourstrict). Si vous n’incluez-Npas ,-Nm(pourmandatory) est la valeur par défaut. Il s’agit d’un changement cassant de SQL Server 2022 (16.x) et des versions antérieures.- Si
-uLa marque d’ordre d’octet (BOM) Little-Endian UTF-16 est écrite sur le fichier de sortie Unicode généré.Certains comportements qui ont été conservés pour maintenir la compatibilité avec
OSQLpeuvent avoir changé, comme l’alignement des en-têtes de colonne pour certains types de données.Toutes les commandes doivent s'adapter à une ligne, même
EXIT. Le mode interactif ne vérifie pas les parenthèses ou les guillemets ouverts dans les commandes et n'invite pas à entrer des lignes successives. Ce comportement est différent de la version ODBC, ce qui permet à la requête d'être exécutée parEXIT(query)de s'étendre sur plusieurs lignes.
Les connexions depuis l'utilitaire sqlcmd (Go) sont limitées aux connexions TCP. Les canaux nommés ne sont pas pris en charge dans le pilote go-mssqldb pour l’instant.
Enhancements
:Connecta un paramètre facultatif-Gpour sélectionner l’une des méthodes d’authentification pour Azure SQL Database -SqlAuthentication, ,ActiveDirectoryDefault,ActiveDirectoryIntegratedActiveDirectoryServicePrincipal, ,ActiveDirectoryManagedIdentity,ActiveDirectoryPassword. Pour plus d’informations, consultez S’authentifier avec l’ID Microsoft Entra dans sqlcmd. Si-Gn’est pas fourni, l’authentification par sécurité intégrée ou SQL Server est utilisée, selon qu’un paramètre de nom d’utilisateur-Uest présent ou non.Le
--driver-logging-levelparamètre de ligne de commande vous permet de visualiser les traces du pilotego-mssqldb. Utilisez64pour voir toutes les traces.sqlcmd (Go) peut imprimer les résultats à l’aide d’un format vertical. Utilisez le commutateur de ligne de commande
-F verticalpour le définir. La variable de scriptSQLCMDFORMATcontrôle aussi cela.Note
Cela est différent du
-Fcommutateur pour sqlcmd (ODBC), qui est utilisé avec-Npour spécifier le nom d’hôte dans le certificat.
Options de ligne de commande
Le tableau suivant répertorie les options de ligne de commande disponibles dans sqlcmd et les systèmes d’exploitation qu’ils prennent en charge.
Options liées à la connexion
-A
S’applique à : Windows uniquement. Linux et macOS ne sont pas pris en charge.
Se connecte à SQL Server avec une connexion administrateur dédiée (DAC). Ce type de connexion est utilisé pour dépanner un serveur. Cette connexion ne fonctionne qu'avec les serveurs prenant en charge DAC. Si DAC n'est pas disponible, sqlcmd génère un message d'erreur et se termine. Pour plus d’informations sur la DAC, consultez Connexion de diagnostic pour les administrateurs de base de données. L'option -A n'est pas prise en charge avec l'option -G. Quand vous vous connectez à Azure SQL Database avec -A, vous devez être administrateur sur le serveur SQL logique. DAC n’est pas disponible pour un administrateur Microsoft Entra.
Note
Pour plus d’informations sur la façon d’établir une connexion d’administrateur dédié (DAC) sur macOS ou Linux, consultez Les instructions de programmation.
-C
Cette option est utilisée par le client pour le configurer afin d'approuver implicitement le certificat de serveur sans validation. Cette option est équivalente à l'option ADO.NET TRUSTSERVERCERTIFICATE = true.
Pour l'utilitaire sqlcmd (Go), les conditions suivantes s'appliquent également :
- Si
-Net-Cne sont pas fournis, sqlcmd négocie l'authentification avec le serveur sans valider le certificat de serveur. - Si
-Nest fourni, mais pas-C, sqlcmd exige la validation du certificat de serveur. Une valeurfalsepour le chiffrement peut toujours entraîner le chiffrement du paquet de connexions. - Si
-Net-Csont fournis, sqlcmd utilise leurs valeurs pour la négociation de chiffrement.
-d db_name
Émet une instruction USE <db_name> quand vous démarrez sqlcmd. Cette option définit la variable de script sqlcmdSQLCMDDBNAME. Ce paramètre spécifie la base de données initiale. La valeur par défaut est la propriété de base de données par défaut de votre connexion. Si la base de données n'existe pas, un message d'erreur est généré et sqlcmd se termine.
-D
Interprète le nom du serveur fourni à -Scomme nom de source de données plutôt que nom d'hôte. Pour plus d’informations, consultez la prise en charge de DSN dans sqlcmd et bcp.
Note
L'option -D n'est disponible que sur les clients Linux et macOS. Sur les clients Windows, il fait référence à une option obsolète qui a été supprimée et qui est ignorée.
-l login_timeout
Spécifie le nombre de secondes au terme duquel une connexion sqlcmd au pilote ODBC expire quand vous tentez d'établir une connexion à un serveur. Cette option définit la variable de script sqlcmdSQLCMDLOGINTIMEOUT. Le délai d'expiration par défaut pour la connexion à sqlcmd est de 8 secondes. Lorsque vous utilisez l’option -G de connexion à Azure SQL Database ou Azure Synapse Analytics et authentifiez-vous à l’aide de l’ID Microsoft Entra, une valeur d’expiration d’au moins 30 secondes est recommandée. Le délai d'expiration de la connexion doit être un nombre compris entre 0 et 65534. Si la valeur fournie n'est pas numérique ou ne se trouve pas dans cette plage, sqlcmd génère un message d'erreur. Une valeur de 0 spécifie un délai d'expiration infini.
-E
Utilise une connexion approuvée au lieu d'un nom d'utilisateur et d'un mot de passe pour se connecter à SQL Server. Par défaut, si -E n'est pas spécifié, sqlcmd utilise l'option de connexion approuvée.
L'option -E ignore les éventuels paramètres de variables d'environnement de nom d'utilisateur et de mot de passe tels que SQLCMDPASSWORD. Si l'option -E est utilisée avec l'option -U ou l'option -P, un message d'erreur est généré.
Note
Pour plus d’informations sur la création de connexions approuvées qui utilisent l’authentification intégrée à partir d’un client Linux ou macOS, consultez Utilisation de l’authentification intégrée.
-g
Définissez le paramètre de chiffrement de colonne sur Enabled. Pour plus d'informations, consultez Always Encrypted. Uniquement les clés principales stockées dans le magasin de certificats Windows sont prises en charge. L'option -g nécessite au moins sqlcmd version 13.1. Pour déterminer votre version, exécutez sqlcmd -?.
-G
Cette option est utilisée par le client lors de la connexion à Azure SQL Database ou Azure Synapse Analytics pour spécifier que l’utilisateur est authentifié avec l’authentification Microsoft Entra. Cette option définit la variable de script sqlcmdSQLCMDUSEAAD = true. L'option -G nécessite au moins sqlcmd version 13.1. Pour déterminer votre version, exécutez sqlcmd -?. Pour plus d’informations, consultez l’authentification Microsoft Entra pour Azure SQL. L'option -A n'est pas prise en charge avec l'option -G.
L'option -G s'applique uniquement à Azure SQL Database et à Azure Synapse Analytics.
L'authentification interactive Microsoft Entra n'est actuellement prise en charge ni sur Linux ni sur macOS. L’authentification intégrée Microsoft Entra nécessite télécharger ODBC Driver pour SQL Server version 17.6.1 ou ultérieure et un environnement Kerberos correctement configuré.
Pour plus d’informations sur l’authentification Microsoft Entra, consultez S’authentifier avec l’ID Microsoft Entra dans sqlcmd.
-H workstation_name
Nom d'une station de travail. Cette option définit la variable de script sqlcmdSQLCMDWORKSTATION. Le nom de la station de travail est listé dans la colonne hostname de la vue catalogue sys.sysprocesses et peut être retourné à l'aide de la procédure stockée sp_who. Si cette option n'est pas spécifiée, le nom de l'ordinateur actif est utilisé par défaut. Ce nom peut être utilisé pour identifier différentes sessions sqlcmd .
-j
Imprime des messages d'erreur bruts à l'écran.
-K application_intent
Déclare le type de la charge de travail de l'application lors de la connexion à un serveur. La seule valeur actuellement prise en charge est ReadOnly. Si -K n'est pas spécifié, sqlcmd ne supporte pas la connectivité à une réplique secondaire dans un groupe de disponibilité. Pour plus d’informations, consultez Décharger une charge de travail en lecture seule vers un réplica secondaire d’un groupe de disponibilité Always On.
Note
-K n’est pas pris en charge dans SUSE Linux Enterprise Server (SLES). Toutefois, vous pouvez spécifier le ApplicationIntent=ReadOnly mot clé dans un fichier DSN passé à sqlcmd. Pour plus d’informations, consultez prise en charge DSN dans sqlcmd et bcp plus loin dans cet article.
Pour plus d’informations, consultez La haute disponibilité et la récupération d’urgence sur Linux et macOS.
-M multisubnet_failover
Spécifiez toujours -M lors de la connexion à l’écouteur de groupe de disponibilité d’un groupe de disponibilité SQL Server ou d’une instance de cluster de basculement SQL Server.
-M fournit une détection plus rapide du serveur actif et une connexion à celui-ci. Si -M n'est pas spécifié, -M est désactivé.
Pour plus d’informations, consultez :
- Se connecter à un écouteur de groupe de disponibilité Always On
- Informations de référence sur la création et la configuration des groupes de disponibilité Always On
- Clustering de basculement et groupes de disponibilité Always On (SQL Server)
- Décharger une charge de travail en lecture seule vers un réplica secondaire d’un groupe de disponibilité Always On
Note
-M n’est pas pris en charge dans SUSE Linux Enterprise Server (SLES). Toutefois, vous pouvez spécifier le MultiSubnetFailover=Yes mot clé dans un fichier DSN passé à sqlcmd. Pour plus d’informations, consultez prise en charge DSN dans sqlcmd et bcp plus loin dans cet article.
Pour plus d’informations, consultez La haute disponibilité et la récupération d’urgence sur Linux et macOS.
-N[s|m|o]
Cette option est utilisée par le client pour demander une connexion chiffrée.
-N peut être o (pour optional), m (pour mandatory, par défaut) ou s (pour strict). Si vous n’incluez -Npas , -Nm (pour mandatory) est la valeur par défaut. Il s’agit d’un changement majeur de SQL Server 2022 (16.x) et des versions antérieures, où -No est la valeur par défaut.
Pour l’utilitaire sqlcmd (Go), -N prend une valeur de chaîne qui peut être l’un des trueéléments , falseou disable pour spécifier le choix de chiffrement. (default est identique à l'omission de paramètre) :
Si
-Net-Cne sont pas fournis, sqlcmd négocie l'authentification avec le serveur sans valider le certificat de serveur.Si
-Nest fourni, mais pas-C, sqlcmd exige la validation du certificat de serveur. Une valeurfalsepour le chiffrement peut toujours entraîner le chiffrement du paquet de connexions.Si
-Net-Csont fournis, sqlcmd utilise leurs valeurs pour la négociation de chiffrement.Dans sqlcmd (ODBC), utilisez
-Fpour spécifier le nom d’hôte dans le certificat. Par exemple:sqlcmd -S server01 -Q "SELECT TOP 100 * FROM WideWorldImporters.Sales.Orders" -A -Ns -F server01.adventure-works.comNote
Il s'agit d'un commutateur différent du commutateur
-Futilisé avec sqlcmd (Go), qui est employé pour imprimer les résultats en utilisant un format vertical.
-P password
Mot de passe spécifié par l'utilisateur. Les mots de passe respectent la casse. Si l’option -U est utilisée, l’option -P n’est pas utilisée et la SQLCMDPASSWORD variable d’environnement n’est pas définie, sqlcmd invite l’utilisateur à entrer un mot de passe. Nous déconseillons d'utiliser le mot de passe Null (vide), mais vous pouvez le spécifier en utilisant une paire de guillemets doubles contigus pour la valeur du paramètre ("").
Important
L'utilisation de -P doit être considérée comme non sécurisée. Évitez de donner le mot de passe sur la ligne de commande. Vous pouvez également utiliser la variable d'environnement SQLCMDPASSWORD ou entrer de manière interactive le mot de passe en omettant l'option -P.
Nous vous recommandons d'utiliser un mot de passe fort.
L'invite de mot de passe est affichée en l'imprimant sur la console, comme suit : Password:
L'entrée utilisateur est masquée. ce qui signifie que rien ne s'affiche et que le curseur reste immobile.
La variable d'environnement SQLCMDPASSWORD vous permet de définir un mot de passe par défaut pour la session active. Par conséquent, les mots de passe n'ont pas besoin d'être codés en dur dans des fichiers de commandes. L'exemple suivant définit d'abord la variable SQLCMDPASSWORD à l'invite de commandes, puis accède à l'utilitaire sqlcmd.
À l’invite de commandes, tapez la commande suivante. Remplacez <password> par un mot de passe valide.
SET SQLCMDPASSWORD=<password>
sqlcmd
SET SQLCMDPASSWORD=<password>
sqlcmd
SET SQLCMDPASSWORD=<password>
sqlcmd
Si la combinaison de nom d'utilisateur et de mot de passe est incorrecte, un message d'erreur est généré.
Note
La OSQLPASSWORD variable d’environnement est conservée pour la compatibilité descendante. La variable d'environnement SQLCMDPASSWORD est prioritaire sur la variable d'environnement OSQLPASSWORD. Il est donc possible d'utiliser sqlcmd et osql côte à côte sans interférence. Les anciens scripts continuent de fonctionner.
Si l'option -P est utilisée avec l'option -E, un message d'erreur est généré.
Si l'option -P est suivie de plusieurs arguments, un message d'erreur est généré et le programme se termine.
Un mot de passe contenant des caractères spéciaux peut générer un message d'erreur. Vous devez échapper des caractères spéciaux lors de l’utilisation de -P, ou utiliser la variable d’environnement SQLCMDPASSWORD à la place.
Sur Linux et macOS, lorsqu’il est utilisé avec l’option -G sans -U, -P spécifie un fichier qui contient un jeton d’accès (v17.8+). Le fichier de jeton doit être au format UTF-16LE (sans BOM).
Les jetons d’accès peuvent être obtenus par le biais de différentes méthodes. Vous devez vous assurer que le jeton d'accès est correct octet par octet, car il est envoyé as-is. Voici un exemple de commande qui obtient un jeton d’accès. La commande utilise les commandes Azure CLI et Linux, et les enregistre dans un fichier au format approprié. Si l’encodage par défaut de votre système ou terminal n’est pas ASCII ou UTF-8, vous devrez peut-être ajuster les iconv options. Veillez à sécuriser soigneusement le fichier obtenu et à le supprimer quand il n’est plus nécessaire.
az account get-access-token --resource https://database.windows.net --output tsv | cut -f 1 | tr -d '\n' | iconv -f ascii -t UTF-16LE > /tmp/tokenFile
-S [protocole :]server[\instance_name][,port]
Spécifie l'instance de SQL Server à laquelle se connecter. Définit la variable de script sqlcmdSQLCMDSERVER.
Spécifiez nom_serveur pour vous connecter à l'instance par défaut de SQL Server sur cet ordinateur serveur. Spécifiez nom_serveur[\nom_instance] pour vous connecter à une instance nommée de SQL Server sur cet ordinateur serveur. Si aucun ordinateur serveur n'est spécifié, sqlcmd se connecte à l'instance par défaut de SQL Server sur l'ordinateur local. Cette option est indispensable lorsque vous exécutez sqlcmd à partir d'un ordinateur distant connecté au réseau.
Leprotocole peut avoir la valeur tcp (TCP/IP), lpc (mémoire partagée) ou np (canaux nommés).
Si vous ne spécifiez pas nom_serveur[\nom_instance] quand vous démarrez sqlcmd, SQL Server recherche et utilise la variable d'environnement SQLCMDSERVER.
Note
La OSQLSERVER variable d’environnement est conservée pour la compatibilité descendante. La variable d'environnement SQLCMDSERVER est prioritaire sur la variable d'environnement OSQLSERVER. Il est donc possible d'utiliser sqlcmd et osql côte à côte sans interférence. Les anciens scripts continuent de fonctionner.
Le pilote ODBC sur Linux et macOS nécessite -S. La seule valeur de protocole valide est tcp.
-U login_id
Nom de connexion ou nom d’utilisateur de la base de données autonome. Pour les utilisateurs de bases de données contenues, vous devez fournir l'option du nom de la base de données (-d).
Note
La OSQLUSER variable d’environnement est conservée pour la compatibilité descendante. La variable d'environnement SQLCMDUSER est prioritaire sur la variable d'environnement OSQLUSER. Il est donc possible d'utiliser sqlcmd et osql côte à côte sans interférence. Les anciens scripts continuent de fonctionner.
Si vous ne spécifiez ni l'option -U ni l'option -P, sqlcmd essaie de se connecter en utilisant le mode d'authentification Windows. L'authentification est basée sur le compte Windows de l'utilisateur exécutant sqlcmd.
Si l'option -U est utilisée avec l'option -E (décrite plus loin dans cet article), un message d'erreur est généré. Si l'option -U est suivie de plusieurs arguments, un message d'erreur est généré et le programme se termine.
-z new_password
Modifiez le mot de passe. Remplacez <oldpassword> l’ancien mot de passe et <newpassword> par le nouveau mot de passe.
sqlcmd -U someuser -P <oldpassword> -z <newpassword>
sqlcmd -U someuser -P <oldpassword> -z <newpassword>
sqlcmd -U someuser -P <oldpassword> -z <newpassword>
-Z new_password
Modifiez le mot de passe et quittez-le. Remplacez <oldpassword> l’ancien mot de passe et <newpassword> par le nouveau mot de passe.
sqlcmd -U someuser -P <oldpassword> -Z <newpassword>
sqlcmd -U someuser -P <oldpassword> -Z <newpassword>
sqlcmd -U someuser -P <oldpassword> -Z <newpassword>
Options d’entrée/sortie
-f codepage | i :codepage[,o :codepage] | o :codepage[,i :codepage]
Spécifie les pages de codes d'entrée et de sortie. Le numéro de pages de codes est une valeur numérique spécifiant une page de codes Windows installée.
Règles de conversion de page de code :
Si aucune page de codes n'est spécifiée, sqlcmd utilise la page de codes active pour le fichier d'entrée et le fichier de sortie, sauf si le fichier d'entrée est un fichier Unicode, auquel cas aucune conversion n'est requise.
sqlcmd reconnaît automatiquement les fichiers d’entrée Unicode big-endian et little-endian. Si l’option
-uest spécifiée, la sortie est toujours unicode de type little-endian.Si aucun fichier de sortie n'est spécifié, la page de codes de sortie correspond à la page de codes de la console. Cette approche permet aux données de sortie d'être correctement affichées sur la console.
Plusieurs fichiers d'entrée sont supposés correspondre à une même page de codes. Les fichiers d'entrée Unicode et non Unicode peuvent être mélangés.
Entrez chcp à l'invite de commandes pour vérifier la page de codes de cmd.exe.
Note
Sur Linux, le numéro de page de codes est une valeur numérique qui spécifie une page de codes Linux installée (disponible depuis la version 17.5.1.1).
-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.
-i input_file[,input_file2...]
Identifie le fichier qui contient un lot d'instructions Transact-SQL ou de procédures stockées. Plusieurs fichiers peuvent être spécifiés qui sont lus et traités dans l’ordre. N'utilisez pas d'espace entre les noms de fichiers.
sqlcmd vérifie d'abord si tous les fichiers spécifiés existent. Si un ou plusieurs fichiers n'existent pas, sqlcmd se termine. Les options -i et -Q/-q s'excluent mutuellement.
Note
Si vous utilisez l’option -i suivie d’un ou plusieurs paramètres supplémentaires, vous devez utiliser un espace entre le paramètre et la valeur. Il s’agit d’un problème connu dans sqlcmd (Go).
Exemples de chemin d’accès :
-i C:\<filename>
-i \\<Server>\<Share$>\<filename>
-i "C:\Some Folder\<file name>"
Les chemins d'accès aux fichiers comportant des espaces doivent être placés entre guillemets.
Cette option peut être utilisée plusieurs fois :
sqlcmd -i <input_file1> -i <input_file2>
sqlcmd -i <input_file1> -i <input_file2>
sqlcmd -i <input_file1> -i <input_file2>
-o output_file
Identifie le fichier recevant une sortie de sqlcmd.
Si -u est spécifié, le fichier_sortie est stocké au format Unicode. Si le nom de fichier n'est pas valide, un message d'erreur est généré et sqlcmd se termine.
sqlcmd ne prend pas en charge l'écriture simultanée de plusieurs processus sqlcmd dans le même fichier. La sortie fichier est endommagée ou incorrecte. L'option -f s'applique également aux formats de fichiers. Ce fichier est créé s'il n'existe pas. Un fichier portant le même nom qui provient d'une session sqlcmd antérieure est remplacé. Le fichier spécifié ici n'est pas le fichier stdout. Si un fichier stdout est spécifié, ce fichier n'est pas utilisé.
Exemples de chemin d’accès :
-o C:< filename>
-o \\<Server>\<Share$>\<filename>
-o "C:\Some Folder\<file name>"
Les chemins d'accès aux fichiers comportant des espaces doivent être placés entre guillemets.
-r[0 | 1]
Redirige la sortie du message d’erreur vers l’écran (stderr). Si vous n'indiquez aucun paramètre ou si vous spécifiez la valeur 0, seuls les messages d'erreur avec un degré de gravité égal ou supérieur à 11 sont redirigés. Si vous spécifiez 1, toutes les sorties de message d'erreur, notamment PRINT, sont redirigées. Cette option n'a aucun effet si vous utilisez -o. Par défaut, les messages sont envoyés à stdout.
Note
Pour l'utilitaire sqlcmd (Go), -r nécessite un argument 0 ou 1.
-R
S'applique à : ODBC sqlcmd uniquement.
Demande à sqlcmd de localiser les colonnes numériques, de devise, de date et heure récupérées auprès de SQL Server, en fonction des paramètres régionaux du client. Par défaut, ces colonnes sont affichées à l'aide des paramètres régionaux du serveur.
Note
Sur Linux et macOS, -R n’utilise actuellement que la mise en forme en_US (anglais des États-Unis).
-u
Spécifie le stockage de fichier_sortie au format Unicode, quel que soit le format de fichier_entrée.
Note
Pour l’utilitaire sqlcmd (Go), la marque d’ordre d’octet (BOM) Little-Endian UTF-16 est écrite sur le fichier de sortie Unicode généré.
Options relatives à l'exécution de requêtes
-e
Écrit des scripts d'entrée sur l'appareil de sortie standard (stdout).
-I
S'applique à : ODBC sqlcmd uniquement.
Définit l'option de connexion SET QUOTED_IDENTIFIER sur ON. Le paramètre par défaut est OFF. Pour plus d’informations, voir SET QUOTED_IDENTIFIER.
Note
Pour désactiver le comportement des Identificateurs entre guillemets dans l'utilitaire sqlcmd (Go), ajoutez SET QUOTED IDENTIFIER OFF dans vos scripts.
-q "requête en ligne de commande"
Exécute une requête au démarrage de sqlcmd , mais ne quitte pas sqlcmd lorsque la requête est terminée. Plusieurs requêtes délimitées par des points-virgules peuvent être exécutées. Placez la requête entre guillemets, comme dans l'exemple suivant.
À l’invite de commandes, tapez :
sqlcmd -d AdventureWorks2022 -q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2022 -q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
sqlcmd -d AdventureWorks2022 -q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2022 -q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
sqlcmd -d AdventureWorks2022 -q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2022 -q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
Important
N'utilisez pas le terminateur GO dans la requête.
Si l'option -b est spécifiée avec cette option, sqlcmd se termine avec une erreur.
-b est décrit ailleurs dans cet article.
-Q "requête cmdline"
Exécute une requête quand sqlcmd démarre, puis quitte immédiatement sqlcmd. Il est possible d'exécuter des requêtes séparées par plusieurs points-virgules.
Placez la requête entre guillemets, comme dans l'exemple suivant.
À l’invite de commandes, tapez :
sqlcmd -d AdventureWorks2022 -Q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2022 -Q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
sqlcmd -d AdventureWorks2022 -Q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2022 -Q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
sqlcmd -d AdventureWorks2022 -Q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2022 -Q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
Important
N'utilisez pas le terminateur GO dans la requête.
Si l'option -b est spécifiée avec cette option, sqlcmd se termine avec une erreur.
-b est décrit ailleurs dans cet article.
-t query_timeout
Spécifie le nombre de secondes avant l'expiration d'une commande (ou d'une instruction Transact-SQL). Cette option définit la variable de script sqlcmdSQLCMDSTATTIMEOUT. Si une valeur délai_expiration_requête n'est pas spécifiée, la commande n'expire pas. La valeur délai_expiration_requête doit être un nombre compris entre 1 et 65534. Si la valeur fournie n'est pas numérique ou n'est pas comprise dans cet intervalle, sqlcmd génère un message d'erreur.
Note
La valeur de délai d’attente réelle peut varier de la valeur de query_timeout spécifiée de plusieurs secondes.
-v var = valeur [ var = valeur... ]
S’applique à : Windows uniquement. Linux et macOS ne sont pas pris en charge.
Crée une variable de script sqlcmd qui peut être utilisée dans un script sqlcmd.
Placez la valeur entre guillemets si elle contient des espaces. Vous pouvez spécifier plusieurs valeurs <var>="<value>". Si l'une des valeurs spécifiées comporte des erreurs, sqlcmd génère un message d'erreur et se termine.
sqlcmd -v MyVar1=something MyVar2="some thing"
sqlcmd -v MyVar1=something -v MyVar2="some thing"
sqlcmd -v MyVar1=something MyVar2="some thing"
sqlcmd -v MyVar1=something -v MyVar2="some thing"
sqlcmd -v MyVar1=something MyVar2="some thing"
sqlcmd -v MyVar1=something -v MyVar2="some thing"
-x
Demande à sqlcmd d'ignorer les variables de script. Ce paramètre est utile lorsqu’un script contient de nombreuses instructions INSERT qui peuvent contenir des chaînes ayant le même format que les variables régulières, telles que $(<variable_name>).
Options de format
-h en-têtes
Spécifie le nombre de lignes à imprimer entre les en-têtes de colonne. Par défaut, les en-têtes ne sont imprimés qu'une fois pour chaque jeu de résultats d'une requête. Cette option définit la variable de script sqlcmdSQLCMDHEADERS. Utilisez -1 pour indiquer qu'aucun en-tête ne doit être imprimé. En présence d'une valeur non valide, sqlcmd génère un message d'erreur et se termine.
-k [1 | 2]
Supprime de la sortie tous les caractères de contrôle, par exemple les tabulations et les caractères de nouvelle ligne. Ce paramètre préserve la mise en forme des colonnes lorsque des données sont retournées.
-
-ksupprime les caractères de contrôle. -
-k1remplace chaque caractère de contrôle par un espace. -
-k2remplace les caractères de contrôle consécutifs par un espace unique.
-s col_separator
Spécifie le caractère de séparation des colonnes. La valeur par défaut est un espace vide. Cette option définit la variable de script sqlcmdSQLCMDCOLSEP. Pour utiliser des caractères ayant une signification particulière pour le système d'exploitation, tels que l'esperluette (&) ou le point-virgule (;), mettez le caractère entre guillemets ("). Le séparateur des colonnes peut être n'importe quel caractère 8 bits.
-w screen_width
Spécifie la largeur d'écran pour la sortie. Cette option définit la variable de script sqlcmdSQLCMDCOLWIDTH. La largeur de colonne doit être un nombre supérieur à 8 et inférieur à 65536. Si la largeur de colonne spécifiée n'est pas comprise dans cette plage, sqlcmd génère un message d'erreur. La largeur par défaut est de 80 caractères. Lorsque la longueur d'une ligne de sortie est supérieure à la largeur de colonne spécifiée, elle se poursuit à la ligne suivante.
-W
Cette option supprime les espaces à droite d'une colonne. Utilisez cette option avec l'option -s lors de la préparation des données à exporter vers une autre application. Vous ne pouvez pas l'utiliser avec l'option -y ou -Y.
-y variable_length_type_display_width
Définit la variable de script sqlcmdSQLCMDMAXVARTYPEWIDTH. Par défaut, il s'agit de 256. Elle limite le nombre de caractères retournés pour les types de données de longueur variable importante :
- varchar(max)
- nvarchar(max)
- varbinary(max)
- xml
- types de données définis par l'utilisateur (UDT)
- text
- ntext
- image
Les types UDT peuvent être de longueur fixe, selon la mise en œuvre. Si cette longueur d'un type UDT à longueur fixe est inférieure à largeur_affichage, la valeur du type UDT retournée n'est pas affectée. Cependant, si la longueur est supérieure à largeur_affichage, la sortie est tronquée.
Caution
Utilisez l’option -y 0 avec une prudence extrême, car elle peut entraîner des problèmes de performances significatifs sur le serveur et le réseau, en fonction de la taille des données retournées.
-Y largeur_affichage_type_longueur_fixe
Définit la variable de script sqlcmdSQLCMDMAXFIXEDTYPEWIDTH. La valeur par défaut est 0 (illimitée). Limite le nombre de caractères retournés pour les types de données suivants :
- char(n), où 1 <= n<= 8000
- nchar(n), où 1 <= n<= 4000
- varchar(n), où 1 <= n<= 8000
- nvarchar(n), où 1 <= n<= 4000
- varbinary(n), où 1 <= n<= 4000
- sql_variant
Options relatives aux rapports d'erreurs
-b
Spécifie que sqlcmd se termine et retourne une valeur DOS ERRORLEVEL quand une erreur se produit. La valeur retournée à la variable ERRORLEVEL est 1 quand le niveau de gravité du message d'erreur SQL Server est supérieur à 10. Sinon, la valeur retournée est 0. Si l’option -V est définie, en plus de -b, sqlcmd ne signale pas d’erreur si le niveau de gravité est inférieur aux valeurs définies à l’aide -Vde . Les fichiers batch de l'invite de commandes peuvent tester la valeur de ERRORLEVEL et gérer l'erreur de manière appropriée.
sqlcmd ne signale pas les erreurs pour le niveau de gravité 10 (messages d'information).
Si le script sqlcmd contient un commentaire incorrect, une erreur de syntaxe ou une variable de script manquante, la valeur ERRORLEVEL retournée est 1.
-m error_level
Contrôle les messages d'erreur envoyés à stdout. Les messages assortis d'un niveau de gravité supérieur ou égal à ce niveau sont envoyés. Quand cette valeur est égale à -1, tous les messages, notamment les messages d'information, sont envoyés. Les espaces ne sont pas autorisés entre -m et -1. Par exemple, -m-1 est valide, mais pas -m -1.
Cette option définit la variable de script sqlcmdSQLCMDERRORLEVEL. Cette variable a une valeur par défaut de 0.
-V error_severity_level
Contrôle le niveau de gravité utilisé pour définir la variable ERRORLEVEL. Les messages d'erreur assortis de niveaux de gravité supérieurs ou égaux à cette valeur sont réglés sur ERRORLEVEL. Les valeurs inférieures à 0 sont signalées comme étant égales à 0. La valeur de la variable ERRORLEVEL peut être testée au moyen de fichiers de commandes et CMD.
Options diverses
-a packet_size
Demande un paquet d'une taille différente. Cette option définit la variable de script sqlcmdSQLCMDPACKETSIZE.
taille_paquet doit être une valeur comprise entre 512 et 32767. Par défaut, il s'agit de 4096. Une plus grande taille de paquet peut améliorer les performances d'exécution des scripts comportant un grand nombre d'instructions Transact-SQL entre des commandes GO. Vous pouvez demander une taille de paquet plus élevée. Cependant, si la requête est refusée, sqlcmd adopte la taille par défaut du serveur comme taille de paquet.
-c batch_terminator
Spécifie le terminateur de traitement. Par défaut, vous devez taper le mot GO sur une ligne isolée pour terminer une commande et l'envoyer à SQL Server. Quand vous réinitialisez le terminateur du lot, n’utilisez pas de mots clés réservés de Transact-SQL ou des caractères ayant une signification particulière pour le système d’exploitation, même s’ils sont précédés d’une barre oblique inverse.
-L[c]
S’applique à : Windows uniquement. Linux et macOS ne sont pas pris en charge.
Répertorie tous les serveurs configurés localement et le nom des serveurs diffusant sur le réseau. Ce paramètre ne peut pas être utilisé en combinaison avec d'autres paramètres. Le nombre maximal de serveurs pouvant être répertoriés est de 3000. Si la liste de serveurs est tronquée en raison de la taille de la mémoire tampon, un message d'avertissement s'affiche.
Note
En raison de la nature de la diffusion sur les réseaux, sqlcmd peut ne pas recevoir de réponse en temps opportun de tous les serveurs. Par conséquent, la liste des serveurs retournés peut varier pour chaque appel de cette option.
Si le paramètre optionnel c est spécifié, la sortie s'affiche sans la ligne d'en-tête Servers: et chaque ligne de serveur est affichée sans espace de début. Cette présentation est qualifiée comme propre. Une sortie propre améliore les performances de traitement des langages de script.
-p[1]
Imprime des statistiques de performances pour chaque jeu de résultats. L'écran suivant illustre le format des statistiques de performances :
Network packet size (bytes): n
x xact[s]:
Clock Time (ms.): total t1 avg t2 (t3 xacts per sec.)
Where:
-
x= Nombre de transactions traitées par SQL Server. -
t1= Durée totale de toutes les transactions. -
t2= Durée moyenne d'une transaction spécifique. -
t3= Nombre moyen de transactions par seconde.
Toutes les durées sont exprimées en millisecondes.
Si le paramètre facultatif 1 est spécifié, les statistiques sont séparées par deux points et peuvent être aisément importées dans une feuille de calcul ou traitées par un script.
Si le paramètre facultatif correspond à n'importe quelle valeur autre que 1, une erreur est générée et sqlcmd se termine.
-X[1]
Désactive les commandes pouvant compromettre la sécurité du système quand sqlcmd est exécuté à partir d'un fichier de commandes. Les commandes désactivées sont toujours reconnues ; sqlcmd émet un message d'avertissement et continue. Si le paramètre facultatif 1 est spécifié, sqlcmd génère un message d'erreur, puis il se termine. Les commandes suivantes sont désactivées lorsque l'option -X est utilisée :
ED-
!!commander
Si l'option -X est spécifiée, elle empêche le passage des variables d'environnement à sqlcmd. Elle interdit également l'exécution du script de démarrage spécifié au moyen de la variable de script SQLCMDINI. Pour plus d'informations sur les variables de script sqlcmd, consultez sqlcmd : utiliser avec des variables de script.
-?
Affiche la version de sqlcmd et un résumé de la syntaxe des options de sqlcmd .
Note
Sur macOS, exécutez sqlcmd '-?' (avec des guillemets) à la place.
Remarks
Les options ne doivent pas nécessairement être utilisées dans l'ordre indiqué dans la section de la syntaxe.
Note
Si vous utilisez l’option -i suivie d’un ou plusieurs paramètres supplémentaires, vous devez utiliser un espace entre le paramètre et la valeur. Il s’agit d’un problème connu dans sqlcmd (Go).
Lorsque plusieurs résultats sont retournés, sqlcmd imprime une ligne vide entre chaque ensemble de résultats dans un traitement. En outre, le message <x> rows affected ne s'affiche pas lorsqu'il ne concerne pas l'instruction exécutée.
Pour utiliser sqlcmd de façon interactive, tapez sqlcmd dans l'invite de commandes avec une ou plusieurs des options décrites plus haut dans cet article. Pour plus d’informations, consultez Utiliser sqlcmd.
Note
Les options -l, -Q, -Z et -i entraîne la fermeture de sqlcmd après l'exécution.
La longueur totale de la ligne de commande sqlcmd dans l'environnement de commande (par exemple cmd.exe ou bash), comprenant tous les arguments et variables développées, est déterminée par le système d'exploitation sous-jacent.
Prise en charge de la DSN dans sqlcmd et bcp
Vous pouvez spécifier un nom de source de données (DSN) au lieu d’un nom de serveur dans sqlcmd ou bcp -S l’option (ou sqlcmd :Connect commande) si vous spécifiez -D.
-D provoque sqlcmd ou bcp pour se connecter au serveur spécifié dans le DSN dans l’option -S.
Les DSN système sont stockés dans le odbc.ini fichier dans le répertoire ODBC SysConfigDir (/etc/odbc.ini sur les installations standard). Les noms de sources de données utilisateur sont stockés dans .odbc.ini du répertoire de base de l’utilisateur (~/.odbc.ini).
Sur les systèmes Windows, les DSN système et utilisateur sont stockés dans le Registre et gérés via odbcad32.exe.
bcp et sqlcmd ne prennent pas en charge les DSN de fichier.
Consultez Attributs et mots clés de chaîne de connexion et DSN pour voir la liste des entrées prises en charge par le pilote.
Dans un DSN, seule l’entrée DRIVER est requise, mais pour se connecter à un serveur distant, sqlcmd ou bcp a besoin d’une valeur dans l’élément SERVER . Si l’élément SERVER est vide ou non présent dans le DSN, sqlcmd et bcp tentent de se connecter à l’instance par défaut sur le système local.
Lorsque vous utilisez bcp sur les systèmes Windows, SQL Server 2017 (14.x) et les versions antérieures nécessitent le pilote SQL Native Client 11 (sqlncli11.dll), tandis que SQL Server 2019 (15.x) et les versions ultérieures nécessitent microsoft ODBC Driver 17 pour le pilote SQL Server (msodbcsql17.dll).
Si la même option est spécifiée à la fois dans la DSN et la ligne de commande sqlcmd ou bcp , l’option de ligne de commande remplace la valeur utilisée dans le DSN. Par exemple, si le DSN a une DATABASE entrée et que la ligne de commande sqlcmd inclut -d, la valeur passée à -d est utilisée. Si Trusted_Connection=yes elle est spécifiée dans le DSN, l’authentification Kerberos est utilisée ; nom d’utilisateur (-U) et mot de passe (-P), le cas échéant, sont ignorés.
Les scripts existants qui appellent isql peuvent être modifiés pour utiliser sqlcmd en définissant l’alias suivant : alias isql="sqlcmd -D".
Bonnes pratiques relatives à sqlcmd
Utilisez les méthodes suivantes pour optimiser la sécurité et l'efficacité.
Utilisez la sécurité intégrée.
Utilisez
-X[1]dans des environnements automatisés.Sécurisez les fichiers d'entrée et de sortie en utilisant les autorisations appropriées du système de fichiers.
Pour accroître les performances, effectuez autant d'opérations que possible au sein d'une session sqlcmd au lieu de recourir à une série de sessions.
Définissez les valeurs de délai d'attente pour l'exécution de lots ou de requêtes supérieures à celles que vous attendez pour exécuter le lot ou la requête.
Utilisez les méthodes suivantes pour améliorer l'exactitude :
Utilisez
-V 16pour consigner les messages de gravité de niveau 16. Les messages de gravité 16 indiquent des erreurs générales qui peuvent être corrigées par l'utilisateur.Vérifiez le code de sortie et
DOS ERRORLEVELla variable après la sortie du processus. sqlcmd retourne normalement0. Sinon, il définit la variableERRORLEVELcomme configurée par-V. En d'autres termes,ERRORLEVELne doit pas afficher la même valeur que le numéro d'erreur signalé par SQL Server. Le numéro d’erreur est une valeur spécifique à SQL Server correspondant à la fonction système @@ERROR.ERRORLEVELest une valeur spécifique à sqlcmd pour indiquer la raison pour laquelle sqlcmd s'est terminé, et sa valeur est conditionnée par la spécification de l'argument de ligne de commande-b.
L'utilisation de -V 16 conjointement avec la vérification du code de sortie et de la variable DOS ERRORLEVEL peut faciliter la détection d'erreurs dans les environnements automatisés, en particulier les contrôles de qualité avant une version de production.
Contenu connexe
- Vérifier la version installée de l’utilitaire sqlcmd
- Télécharger et installer l’utilitaire sqlcmd
- Commandes dans l’utilitaire sqlcmd
- Utiliser sqlcmd avec des variables de script
- Démarrage rapide : exécuter des images de conteneurs SQL Server sous Linux avec Docker
- Démarrer l’utilitaire sqlcmd
- Exécuter T-SQL à partir d’un fichier de script avec sqlcmd
- Utiliser sqlcmd
- Se connecter à SQL Server avec sqlcmd
- Modifier des scripts SQLCMD à l'aide de l'Éditeur de requête
- Créer une étape de tâche CmdExec