Connexion avec sqlcmd
L’utilitaire sqlcmd est disponible dans Microsoft ODBC Driver for SQL Server sur Linux et macOS.
Les commandes suivantes montrent respectivement comment utiliser l’authentification Windows (Kerberos) l’authentification SQL Server :
sqlcmd -E -Sxxx.xxx.xxx.xxx
sqlcmd -Sxxx.xxx.xxx.xxx -Uxxx -Pxxx
Options disponibles
Les options suivantes sont disponibles dans sqlcmd sur Linux et macOS :
-?
Afficher l’utilisation de sqlcmd
.
-a
Demander une taille de paquet.
-b
Terminer le programme de traitement par lots en cas d’erreur.
-c batch_terminator
Spécifier le terminateur de lot.
-C
Faire confiance au certificat de serveur.
-d database_name
Émettez une instruction USE
database_name quand vous démarrez sqlcmd
.
-D
Fait en sorte que la valeur passée à l’option -S de sqlcmd
soit interprétée comme un nom de source de données (DSN). Pour plus d’informations, consultez « Prise en charge du nom de source de données dans sqlcmd
et bcp
» à la fin de cette rubrique.
-e
Écrire des scripts d’entrée sur le périphérique de sortie standard (stdout).
-E
Utiliser la connexion approuvée (authentification intégrée). Pour plus d’informations sur l’établissement 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.
-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 page de codes est une valeur numérique qui spécifie une page de codes Linux installée. (disponible depuis 17.5.1.1)
-G
Ce commutateur est utilisé par le client durant la connexion à la base de données Azure SQL, à Azure SQL Managed Instance ou à Azure Synapse Analytics pour spécifier que l’utilisateur soit authentifié avec Microsoft Entra ID (anciennement Azure Active Directory). Il peut être combiné avec l’option -P seule pour utiliser l’authentification par jeton d’accès (v17.8 et versions ultérieures). Cette option définit la variable de script sqlcmd SQLCMDUSEAAD = true. Le commutateur -G
nécessite au moins la version sqlcmd 17.6. Pour déterminer votre version, exécutez sqlcmd -?
.
Important
L’option -G s’applique uniquement à la base de données Azure SQL, à Azure SQL Managed Instance 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 requiert la version 17.6.1 ou une version ultérieur du pilote ODBC Microsoft 17 pour SQL Server et un environnement Kerberos correctement configuré.
-h number_of_rows
Spécifier le nombre de lignes à imprimer entre les en-têtes de colonnes.
-H
Spécifier un nom de station de travail.
-i input_file[,input_file[,...]]
Identifier le fichier qui contient un lot d’instructions SQL ou de procédures stockées.
-I
Affecter la valeur ON à l’option de connexion SET QUOTED_IDENTIFIER
.
-k
Supprimer ou remplacer des caractères de contrôle.
-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 prend pas en charge la connectivité à un réplica secondaire dans un groupe de disponibilité Always On. Pour plus d’informations, consultez Prise en charge par le pilote ODBC pour Linux et macOS de la haute disponibilité et de la reprise d’activité.
Notes
L’option -K n’est pas prise en charge dans la version CTP pour SUSE Linux. Vous pouvez toutefois spécifier le mot clé ApplicationIntent=ReadOnly dans un fichier DSN passé à sqlcmd
. Pour plus d’informations, consultez « Prise en charge du nom de source de données dans sqlcmd
et bcp
» à la fin de cette rubrique.
-l timeout
Spécifiez le nombre de secondes au terme duquel une connexion sqlcmd
expire quand vous tentez de vous connecter à un serveur.
-m error_level
Déterminer les messages d’erreur envoyés à stdout.
-M multisubnet_failover
Spécifiez toujours -M en cas de connexion à l’écouteur de groupe de disponibilité d’un groupe de disponibilité SQL Server 2012 (11.x) ou d’une instance de cluster de basculement SQL Server 2012 (11.x). -M accélère la détection des basculements et la connexion au serveur (actuellement) actif. Si -M n’est pas spécifié, -M est désactivé. Pour plus d’informations sur les groupes de disponibilité AlwaysOn, consultez Pilote ODBC sur Linux et macOS - Haute disponibilité et récupération d’urgence.
Notes
L’option -M n’est pas prise en charge dans la version CTP pour SUSE Linux. Vous pouvez toutefois spécifier le mot clé MultiSubnetFailover=Yes dans un fichier DSN passé à sqlcmd
. Pour plus d’informations, consultez « Prise en charge du nom de source de données dans sqlcmd
et bcp
» à la fin de cette rubrique.
-N[s|m|o]
Définissez respectivement le mode de chiffrement de la connexion sur Strict, Obligatoire ou Facultatif. Obligatoire par défaut si le paramètre n’est pas spécifié. ([s|m|o]
ajouté dans sqlcmd 18.0)
-o output_file
Identifier le fichier qui reçoit le sortie de sqlcmd
.
-p
Imprimer des statistiques de performances pour chaque jeu de résultats.
-P
Spécifier un mot de passe utilisateur. Lorsqu’il est utilisé avec l’option -G sans -U, spécifie un fichier contenant un jeton d’accès (v17.8 et versions ultérieures). Le fichier de jeton doit être au format UTF-16LE (pas de marque d’ordre d’octet).
Les jetons d’accès peuvent être obtenus par le biais de différentes méthodes. Il est important de s’assurer que le jeton d’accès est de type correct octet par octet, car il est envoyé tel quel. Vous trouverez ci-dessous 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 de votre terminal n’est pas ASCII ou UTF-8, vous devrez peut-être ajuster les options iconv
. 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
-q commandline_query
Exécute une requête au démarrage de sqlcmd
, mais ne quitte pas une fois la requête exécutée.
-Q commandline_query
Exécuter une requête au démarrage de sqlcmd
. sqlcmd
s’arrête quand la requête est terminée.
-r
Redirige les messages d’erreur vers stderr.
-R
Fait en sorte que le pilote utilise les paramètres régionaux du client pour convertir les données de devise et de date et d’heure en données caractères. Uniquement actuellement uniquement la mise en forme en_US (anglais américain).
-s column_separator_char
Spécifier le caractère de séparation des colonnes.
-S [protocol:] server[,port]
Spécifier l’instance de SQL Server à laquelle il faudra se connecter ou, si -D est utilisé, un nom de source de données. Le pilote ODBC sur Linux et macOS impose d’utiliser -S. La seule valeur de protocole valide est tcp.
-t query_timeout
Spécifier le nombre de secondes accordées pour l’exécution d’une commande (ou une instruction SQL).
-u
Spécifier que le fichier output_file est stocké au format Unicode, quel que soit le format du fichier input_file.
-U
login_id Spécifie un ID de connexion d’utilisateur.
-V error_severity_level
Contrôler le niveau de gravité utilisé pour définir la variable ERRORLEVEL.
-w column_width
Spécifier la largeur d’écran pour la sortie.
-W
Supprimer les espaces à droite d’une colonne.
-x
Désactiver la substitution de variable.
-X
Désactiver les commandes, le script de démarrage et les variables d’environnement.
-y variable_length_type_display_width
Définissez la variable de script sqlcmd
SQLCMDMAXFIXEDTYPEWIDTH
.
-Y fixed_length_type_display_width
Définissez la variable de script sqlcmd
SQLCMDMAXVARTYPEWIDTH
.
-z mot de passe
Modifier le mot de passe.
-Z mot de passe
Modifier le mot de passe et quitter.
Commandes disponibles
Dans la version actuelle, les commandes suivantes sont disponibles :
[:]!!
:Connect
:Error
[:]EXIT
GO [count]
:Help
:List
:Listvar
:On Error
:Out
:Perftrace
[:]QUIT
:r
:RESET
:setvar
Options non disponibles
Dans la version actuelle, les options suivantes ne sont pas disponibles :
-A
Se connecter à SQL Server avec une connexion administrateur dédiée (DAC). Pour plus d’informations sur la façon d’établir une connexion administrateur dédiée, consultez Recommandations en matière de programmation.
-L
Répertorier les serveurs configurés localement et le nom des serveurs diffusant sur le réseau.
-v
Créer une variable de script sqlcmd
pouvant être utilisée dans un script sqlcmd
.
Vous pouvez utiliser la méthode alternative suivante : Placez les paramètres dans un même fichier, que vous pouvez ensuite ajouter à un autre fichier. Cette méthode vous aide à utiliser un fichier de paramètres pour remplacer les valeurs. Par exemple, créer un fichier nommé a.sql
(le fichier de paramètres) avec le contenu suivant :
:setvar ColumnName object_id
:setvar TableName sys.objects
Ensuite, créer un fichier nommé b.sql
avec les paramètres de remplacement :
SELECT $(ColumnName) FROM $(TableName)
En ligne de commande, combinez a.sql
et b.sql
en c.sql
avec les commandes suivantes :
cat a.sql > c.sql
cat b.sql >> c.sql
Exécutez sqlcmd
et utilisez c.sql
comme fichier d’entrée :
sqlcmd -S<...> -P<..> -U<..> -I c.sql
Commandes non disponibles
Dans la version actuelle, les commandes suivantes ne sont pas disponibles :
:ED
:ServerList
:XML
Prise en charge du nom de source de données dans sqlcmd et bcp
Vous pouvez indiquer un nom de source de données (DSN) plutôt qu’un nom de serveur dans l’option sqlcmd ou bcp -S
(ou la commande sqlcmd :Connect) 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 noms de sources de données système sont stockés dans le fichier odbc.ini
du 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
dans le répertoire de base de l’utilisateur (~/.odbc.ini
).
Sur les systèmes Windows, les noms de source de données Utilisateur et Système sont stockés dans le Registre et gérés par le biais d’odbcad32.exe. Les fichiers de noms de source de données ne sont pas pris en charge par bcp ni sqlcmd.
Consultez Attributs et mots clés de chaîne de connexion et DSN pour la liste des entrées prises en charge par le pilote.
Dans un nom de source de données, seule l’entrée DRIVER est nécessaire, mais pour établir une connexion à un serveur distant, sqlcmd
ou bcp
a besoin d’une valeur dans l’élément SERVER. Si l’élément SERVER est vide ou absent dans le nom de source de données, sqlcmd
et bcp
tenteront de se connecter à l’instance par défaut sur le système local.
Lors de l’utilisation de bcp sur les systèmes Windows, SQL Server 2017 (14.x) et versions antérieures exigent le pilote SQL Native Client 11 (sqlncli11.dll), tandis que SQL Server 2019 (15.x) et versions ultérieures exigent le pilote Microsoft ODBC Driver 17 for SQL Server (msodbcsql17.dll).
Si vous spécifiez la même option dans le nom de source de données et sur la ligne de commande sqlcmd
ou bcp
, l’option de ligne de commande remplace la valeur utilisée dans le nom de source de données. Par exemple, si le nom de source de données comporte une entrée DATABASE et que la ligne de commande sqlcmd
inclut -d, la valeur passée à -d est utilisée. Si vous spécifiez Trusted_Connection=yes dans le nom de source de données, l’authentification Kerberos est utilisée et le nom d’utilisateur ( -U) et le mot de passe ( -P), s’ils sont fournis, sont ignorés.
Vous pouvez modifier les scripts qui appellent isql
pour qu’ils utilisent sqlcmd
en définissant l’alias suivant : alias isql="sqlcmd -D"
.