Partager via


utilitaire sqlcmd

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Base de données SQL dans Microsoft Fabric

Utilisez l’utilitaire sqlcmd pour entrer des instructions Transact-SQL, des procédures système et des fichiers de script via 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

Deux variantes de sqlcmd existent :

  • sqlcmd (Go) : le go-mssqldb basé 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-tools package 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

Dans cet article, les termes option, paramètre, argument de ligne de commande et commutateur sont interchangeables.

sqlcmd (Go) a deux modes d’aide : --help pour les sous-commandes modernes et -? pour les indicateurs compatibles ODBC.

Commandes modernes (--help)

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.

Indicateurs compatibles ODBC (- ?)

sqlcmd
   -a packet_size
   -A (dedicated administrator connection)
   -b (terminate batch job if there is an error)
   -c batch_terminator
   -C (trust the server certificate)
   -d db_name
   -e (echo input)
   -E (use trusted connection)
   -F hostname_in_certificate
   -g (enable column encryption)
   -G (use Azure Active Directory for authentication)
   -h rows_per_header
   -H workstation_name
   -i input_file
   -I (enable quoted identifiers, always on)
   -k[1 | 2] (remove or replace control characters)
   -K application_intent
   -l login_timeout
   -L[c] (list servers, optional clean output)
   -m error_level
   -M multisubnet_failover (always enabled)
   -N[s|m|o] (encrypt connection)
   -o output_file
   -P password
   -q "cmdline query"
   -Q "cmdline query" (and exit)
   -r[0 | 1] (msgs to stderr)
   -R (ignored, client regional settings not used)
   -s col_separator
   -S [protocol:]server[instance_name][,port]
   -t query_timeout
   -u (unicode output file)
   -U login_id
   -v var = "value"
   -V error_severity_level
   -w screen_width
   -W (remove trailing spaces)
   -x (disable variable substitution)
   -X[1] (disable commands, startup script, environment variables, optional exit)
   -y variable_length_type_display_width
   -Y fixed_length_type_display_width
   -z new_password
   -Z new_password (and exit)
   --authentication-method (Azure SQL authentication method)
   --driver-logging-level (mssql driver log level)
   --vertical (print results in vertical format)
   -? (usage)

Changements cassants de sqlcmd (ODBC)

Plusieurs paramètres et comportements diffèrent dans l’utilitaire sqlcmd (Go). Pour obtenir la liste la plus à jour des indicateurs manquants pour la compatibilité descendante, consultez la discussion GitHub Prioriser l’implémentation des indicateurs de compatibilité descendante.

  • sqlcmd prend en charge l'option -P (Go). Pour l’authentification SQL Server, vous pouvez fournir des mots de passe via ces mécanismes :

    • Commutateur -P de ligne de commande
    • La variable d'environnement SQLCMDPASSWORD
    • La commande :CONNECT
    • Lorsque vous y êtes invité, tapez le mot de passe pour terminer une connexion
  • Le commutateur -r nécessite un argument 0 ou 1.

  • Le -R commutateur est ignoré. Le runtime Go ne fournit pas d’accès aux informations de paramètres régionaux utilisateur.

  • Le -I commutateur est ignoré. Les identificateurs entre guillemets sont toujours activés. Pour désactiver le comportement de l'identificateur entre guillemets, ajoutez SET QUOTED IDENTIFIER OFF à vos scripts.

  • Le -M commutateur est ignoré. sqlcmd (Go) permet toujours le basculement entre sous-réseaux multiples.

  • Le -N prend une valeur de chaîne pour spécifier le choix de chiffrement, qui est l’un des s[trict], t[rue]/m[andatory]/yes/1, o[ptional]/no/0/f[alse], ou disable.

    • Si vous ne fournissez pas -N et -C, sqlcmd négocie l'authentification avec le serveur sans valider le certificat du serveur.
    • Si vous fournissez -N mais pas -C, sqlcmd nécessite la validation du certificat de serveur. Une valeur false pour le chiffrement peut toujours entraîner le chiffrement du paquet de connexions.
    • Si vous fournissez à la fois -N et -C, alors sqlcmd utilise leurs valeurs pour la négociation de chiffrement.
    • Pour plus d’informations sur la négociation de chiffrement client/serveur, consultez MS-TDS PRELOGIN.

    Important

    Dans SQL Server 2025 (17.x), -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. Ce comportement est une modification entraînant une rupture dans SQL Server 2022 (16.x) et les versions antérieures.

  • Avec l'option -u, le fichier de sortie Unicode généré est préfixé par la marque d'ordre d'octet (BOM) UTF-16 par ordre d'octet faible.

  • Certains comportements qui ont été conservés pour maintenir la compatibilité avec OSQL peuvent 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, qui permet à la requête exécutée par EXIT(query) de s'étendre sur plusieurs lignes.

sqlcmd (Go) prend en charge la mémoire partagée, les canaux nommés et le transport TCP. Utilisez le préfixe de protocole approprié sur le nom du serveur pour forcer un protocole :

  • lpc pour la mémoire partagée (localhost uniquement)
  • np pour les canaux nommés ou utilisez le chemin du canal nommé UNC comme nom de serveur
  • tcp pour TCP

Si vous ne spécifiez pas de protocole, sqlcmd tente de composer dans cet ordre : lpc>np>tcp. Lorsque vous vous connectez à un hôte distant, lpc il est ignoré.

Enhancements

  • :Connecta un paramètre facultatif -G pour 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 -G n’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 -U est présent ou non.

  • Le --driver-logging-level paramètre de ligne de commande vous permet de visualiser les traces du pilote go-mssqldb. Utilisez 64 pour voir toutes les traces.

  • sqlcmd (Go) peut imprimer les résultats à l’aide d’un format vertical. Utilisez le commutateur de ligne de commande --vertical pour le définir. La variable de script SQLCMDFORMAT contrôle aussi cela.

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.

Option de ligne de commande Pris en charge sur Windows Pris en charge sur Linux et macOS
Options liées à la connexion
-A Yes No
-C Yes Yes
-d db_name Yes Yes
-D Yes Yes
-l login_timeout Yes Yes
-E Yes Yes
-F nom_d'hôte_dans_le_certificat Yes Yes
-g Yes Yes
-G Yes Yes
-H nom_de_station_de_travail Yes Yes
-j Yes Yes
-J server_certificate No Yes
-K intention de l'application Yes Yes
-M multisubnet_failover Yes Yes
-N[s|m|o] Yes Yes
-P password Yes Yes
-S [protocole :]server[\instance_name][,port] Yes Yes
-U login_id Yes Yes
-z new_password Yes Yes
-Z new_password Yes Yes
Options d’entrée/sortie
-f codepage | i :codepage[,o :codepage] | o :codepage[,i :codepage] Yes Yes
-i fichier_d'entrée (input_file)[,fichier_d'entrée2 (input_file2)...] Yes Yes
-o fichier_de_sortie Yes Yes
-r[0 | 1] Yes Yes
-R Yes Yes
-u Yes Yes
Options d’exécution de requête
-e Yes Yes
-I Yes Yes
-q « requête ligne de commande » Yes Yes
-Q « requête cmdline » Yes Yes
-t query_timeout Yes Yes
-v var = valeur [ var = valeur... ] Yes No
-x Yes Yes
Options de format
-h en-têtes Yes Yes
-k [1 | 2] Yes Yes
-s col_separator Yes Yes
-w screen_width Yes Yes
-W Yes Yes
-y variable_length_type_display_width Yes Yes
-Y largeur_affichage_type_longueur_fixée Yes Yes
Options de création de rapports d’erreurs
-b Yes Yes
-m error_level Yes Yes
-V niveau_de_gravite_erreur Yes Yes
Options diverses
-a packet_size Yes Yes
-c batch_terminator Yes Yes
-L[c] Yes No
-p[1] Yes Yes
-X[1] Yes Yes
-? Yes Yes

-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). Utilisez ce type de connexion pour résoudre les problèmes d’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. Lorsque vous vous connectez à Azure SQL Database à l’aide de -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

Utilisez cette option pour configurer le client pour 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 vous ne fournissez pas -N et -C, sqlcmd négocie l’authentification avec le serveur sans valider le certificat du serveur.
  • Si vous fournissez -N mais pas -C, sqlcmd nécessite la validation du certificat de serveur. Une valeur false pour le chiffrement peut toujours entraîner le chiffrement du paquet de connexions.
  • Si vous fournissez à la fois -N et -C, 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 supprimée et 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 avec l’ID Microsoft Entra, une valeur de délai d’expiration d’au moins 30 secondes est recommandée. Le délai d’expiration de connexion doit être un nombre compris entre 0 et 65534. Si la valeur n’est pas numérique ou ne tombe 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.

-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. Vous pouvez utiliser ce paramètre lorsque le nom du serveur ne correspond pas au cn ou au réseau SAN, par exemple lors de l’utilisation d’alias DNS.

Par exemple:

sqlcmd -S server01 -Q "SELECT TOP 100 * FROM WideWorldImporters.Sales.Orders" -A -Ns -F server01.adventure-works.com

Note

sqlcmd (Go) utilise -F également pour spécifier le nom d’hôte dans le certificat de serveur. Pour imprimer les résultats au format vertical, sqlcmd (Go) utilise le commutateur --vertical à la place.

-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

Utilisez cette option pour vous authentifier auprès de Microsoft Entra lors de la connexion à Azure SQL Database ou à Azure Synapse Analytics. 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 apparaît dans la colonne hostname de la vue sys.sysprocesses catalogue et peut être retourné à l’aide de la procédure stockée sp_who. Si vous ne spécifiez pas cette option, la valeur par défaut est le nom de l’ordinateur actuel. Utilisez ce nom pour identifier différentes sessions sqlcmd .

-j

Imprime des messages d'erreur bruts à l'écran.

-J certificat_serveur

S’applique à : sqlcmd (ODBC), Linux et macOS uniquement. Windows n’est pas pris en charge.

Spécifie le chemin d’accès à un fichier de certificat de serveur. Ce fichier est mis en correspondance avec le certificat de chiffrement de connexion du serveur. La vérification est effectuée au lieu de la validation standard des certificats (expiration, nom d'hôte, chaîne de confiance, etc.). Les formats de certificat acceptés sont PEM, DER et CER.

Utilisez cette option lors de la connexion à des serveurs qui utilisent des certificats auto-signés ou des certificats émis par une autorité de certification privée. Si le chiffrement est activé et que la validation du certificat échoue, la connexion échoue.

Par exemple:

sqlcmd -S server01 -Q "SELECT TOP 100 * FROM WideWorldImporters.Sales.Orders" -A -Ns -J /etc/ssl/certs/server_certificate.cer

-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 vous ne spécifiez pas -K, sqlcmd ne prend pas en charge la connectivité à un réplica 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 vous ne spécifiez -Mpas , -M est désactivé.

Pour plus d’informations, consultez :

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]

Le client utilise cette option pour demander une connexion chiffrée.

Le -N commutateur peut être o (pour optional), m (pour mandatory, par défaut) ou s (pour strict). Si vous n’incluez -Npas, la valeur par défaut est -Nm (pour mandatory). Cette valeur par défaut est une modification cassant de SQL Server 2022 (16.x) et des versions antérieures, où la valeur par défaut est -No.

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 vous ne fournissez pas -N et -C, sqlcmd négocie l’authentification avec le serveur sans valider le certificat du serveur.

  • Si vous fournissez -N mais pas -C, sqlcmd nécessite la validation du certificat de serveur. Une valeur false pour le chiffrement peut toujours entraîner le chiffrement du paquet de connexions.

  • Si vous fournissez à la fois -N et -C, sqlcmd utilise leurs valeurs pour la négociation de chiffrement.

-P password

Mot de passe spécifié par l'utilisateur. Les mots de passe respectent la casse. Si vous utilisez l’option -U, mais n’utilisez pas l’option -P ou ne définissez pas la variable d’environnement SQLCMDPASSWORD, sqlcmd demande le mot de passe à l’utilisateur. N’utilisez pas de mot de passe Null (vide), mais vous pouvez spécifier le mot de passe Null à l’aide d’une paire de guillemets doubles contigus pour la valeur du paramètre ("").

Important

L’utilisation -P n’est pas 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.

Utilisez 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 vous utilisez l’option -P avec l’option -E , un message d’erreur est généré.

Si vous utilisez l’option -P avec plusieurs arguments, un message d’erreur est généré et le programme se ferme.

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. L’exemple de commande suivant 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 établir une connexion. Cette option 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 vous ne spécifiez pas d’ordinateur serveur, sqlcmd se connecte à l’instance par défaut de SQL Server sur l’ordinateur local. Cette option est requise lorsque vous exécutez sqlcmd à partir d’un ordinateur distant sur le 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 vous utilisez l’option -U 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 et de 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 vous ne spécifiez pas de page de codes, sqlcmd utilise la page de codes actuelle pour les fichiers d’entrée et 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 vous spécifiez l’option -u, la sortie est toujours en Unicode little-endian.

  • Si vous ne spécifiez pas de fichier de sortie, la page de codes de sortie est 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 utiliser la 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).

-i input_file[,input_file2...]

Identifie le fichier qui contient un lot d'instructions Transact-SQL ou de procédures stockées. Vous pouvez spécifier plusieurs fichiers que sqlcmd lit et traite 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. L’option -i et les -Q/-q options 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. Cette exigence est 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.

Vous pouvez utiliser cette option 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 vous spécifiez -u, sqlcmd stocke les output_file au format Unicode. Si le nom de fichier n’est pas valide, sqlcmd génère un message d’erreur et se ferme. sqlcmd ne prend pas en charge l'écriture simultanée de plusieurs processus sqlcmd dans le même fichier. Si cela se produit, considérez la sortie du fichier endommagée ou incorrecte. L'option -f s'applique également aux formats de fichiers. sqlcmd crée ce fichier s’il n’existe pas. sqlcmd remplace un fichier du même nom à partir d’une session précédente. Le fichier spécifié ici n'est pas le fichier stdout. Si vous spécifiez un stdout fichier, sqlcmd n’utilise pas ce fichier.

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 uniquement à : sqlcmd (ODBC).

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), le fichier de sortie Unicode généré est préfixé avec la marque d’ordre d’octet (BOM) UTF-16 little-endian.

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 uniquement à : sqlcmd (ODBC).

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 une fois la requête terminée. Vous pouvez exécuter plusieurs requêtes délimitées par un point-virgule. Placez la requête entre guillemets, comme dans l'exemple suivant.

À l’invite de commandes, tapez :

sqlcmd -d AdventureWorks2025 -q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2025 -q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
sqlcmd -d AdventureWorks2025 -q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2025 -q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
sqlcmd -d AdventureWorks2025 -q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2025 -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 vous spécifiez -b avec cette option, sqlcmd se ferme avec une erreur. L’option -b est décrite ailleurs dans cet article.

-Q "requête cmdline"

Exécute une requête quand sqlcmd démarre, puis quitte immédiatement sqlcmd. Vous pouvez exécuter plusieurs requêtes délimitées par un point-virgule.

Placez la requête entre guillemets, comme dans l'exemple suivant.

À l’invite de commandes, tapez :

sqlcmd -d AdventureWorks2025 -Q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2025 -Q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
sqlcmd -d AdventureWorks2025 -Q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2025 -Q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
sqlcmd -d AdventureWorks2025 -Q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2025 -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 vous spécifiez -b avec cette option, sqlcmd se ferme avec une erreur. L’option -b est décrite 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 vous ne spécifiez pas de valeur query_timeout , la commande n’expire pas. La query_timeout doit être un nombre compris entre 1 et 65534. Si vous fournissez une valeur qui n’est pas numérique ou ne tombe pas dans cette plage, sqlcmd génère une erreur.

Note

La valeur de délai d’expiration 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 à utiliser 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 que vous spécifiez contient des erreurs, sqlcmd génère un message d’erreur, puis se ferme.

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. Le paramètre par défaut imprime les en-têtes une fois pour chaque ensemble de résultats de requête. Cette option définit la variable de script sqlcmdSQLCMDHEADERS. Utilisez -1 pour spécifier que les en-têtes ne sont pas imprimés. Une valeur non valide entraîne la génération d’un message d’erreur sqlcmd , puis la sortie.

-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.

  • -k supprime les caractères de contrôle.
  • -k1 remplace chaque caractère de contrôle par un espace.
  • -k2 remplace 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

Supprime les espaces de fin d’une colonne. Utilisez cette option avec l'option -s lors de la préparation de 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. La valeur par défaut est 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 UDT de longueur fixe est plus courte que display_width, la valeur de l’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 par sqlcmd à la ERRORLEVEL variable est 1 lorsque le message d’erreur SQL Server a un niveau de gravité supérieur à 10. Sinon, la valeur retournée est 0. Si vous définissez l’option -V , en plus de -b, sqlcmd ne signale pas d’erreur si le niveau de gravité est inférieur aux valeurs définies par l’option -V . 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 niveau_d'erreur

Contrôle les messages d'erreur envoyés à stdout. sqlcmd envoie des messages dont le niveau de gravité est supérieur ou égal à ce niveau. Lorsque vous définissez cette valeur -1sur , sqlcmd envoie tous les messages, y compris les messages d’information. N’incluez pas d’espaces entre les balises -m-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 niveau_de_gravité_de_l'erreur

Contrôle le niveau de gravité que sqlcmd utilise pour définir la ERRORLEVEL variable. 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. Vous pouvez utiliser des fichiers batch et CMD pour tester la valeur de la ERRORLEVEL variable.

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 taille de paquet plus grande peut améliorer les performances pour l’exécution de scripts qui ont de nombreuses instructions Transact-SQL entre GO les commandes. 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 arrêter les commandes et les envoyer à SQL Server à l’aide du mot GO sur une ligne par elle-même, suivie d’Entrée. 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. Vous ne pouvez pas utiliser ce paramètre en combinaison avec d’autres paramètres. Le nombre maximal d’ordinateurs serveurs pouvant être répertoriés est de 3 000. 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 vous spécifiez le paramètre cfacultatif, la sortie s’affiche sans la Servers: ligne d’en-tête et chaque ligne de serveur est répertoriée sans espaces 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 vous spécifiez le paramètre 1facultatif, le format de sortie des statistiques est au format séparé par deux-points qui peut être importé facilement dans une feuille de calcul ou traité par un script.

Si vous spécifiez le paramètre facultatif comme valeur autre que 1, une erreur est générée et sqlcmd se ferme.

-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 vous spécifiez le paramètre 1facultatif, sqlcmd génère un message d’erreur, puis se ferme. Les commandes suivantes sont désactivées lorsque l'option -X est utilisée :

  • ED
  • !! commander

Si vous spécifiez l’option -X , elle empêche les variables d’environnement d’être transmises à 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

Vous n’avez pas besoin d’utiliser d’options dans l’ordre indiqué dans la section 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. Cette exigence est un problème connu dans sqlcmd (Go).

sqlcmd imprime une ligne vide entre plusieurs jeux de résultats dans un lot. En outre, le <x> rows affected message n’apparaît pas lorsqu’il ne s’applique pas à l’instruction en cours d’exécution.

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, ou -Z-i provoquent la sortie de sqlcmd après l’exécution.

Le système d’exploitation sous-jacent détermine la longueur totale de la ligne de commande sqlcmd dans l’environnement de commande (par exemple, cmd.exe ou bash), y compris tous les arguments et variables développées.

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. Si vous utilisez l’option -D , sqlcmd et bcp se connectent au serveur spécifié dans le DSN par 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.

Pour obtenir la liste des entrées que le pilote prend en charge, consultez DSN et Mots clés et Attributs de chaîne de connexion.

Dans un DSN, seule l’entrée DRIVER est requise. Pour vous 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 ou bcp tente 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 vous spécifiez la même option 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 vous spécifiez Trusted_Connection=yes 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.

Vous pouvez modifier des scripts existants qui appellent isql pour utiliser sqlcmd, en définissant l’alias suivant : alias isql="sqlcmd -D".

Bonnes pratiques relatives à sqlcmd

Utilisez les pratiques 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 augmenter les performances, effectuez autant que possible dans une session sqlcmd , au lieu d’utiliser une série de sessions.

  • Définissez les valeurs de délai d’expiration pour l’exécution de lots ou de requêtes supérieures à la durée d’exécution attendue pour le lot ou la requête.

Utilisez les méthodes suivantes pour améliorer l'exactitude :

  • Utilisez -V 16 pour consigner les messages de gravité de niveau 16. Les messages de gravité 16 indiquent des erreurs générales que vous pouvez corriger.

  • Vérifiez le code de sortie et DOS ERRORLEVEL la variable après la sortie du processus. sqlcmd retourne 0 normalement. Sinon, il assigne le ERRORLEVEL tel que configuré par -V. En d’autres termes, ne vous attendez ERRORLEVEL pas à être la même valeur que le numéro d’erreur signalé à partir de SQL Server. Le numéro d’erreur est une valeur spécifique à SQL Server correspondant à la fonction système @@ERROR. ERRORLEVEL est une valeur spécifique à sqlcmd pour indiquer pourquoi sqlcmd s’est terminé. Sa valeur est influencée par la spécification du -b paramètre.

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.