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.
Note
Pour connaître la variante et la version de sqlcmd installées sur votre système, consultez Vérifier la version installée de l’utilitaire sqlcmd. Pour plus d’informations sur l’obtention de sqlcmd, consultez Télécharger et installer l’utilitaire sqlcmd.
Variables de script dans sqlcmd
Les variables utilisées dans les scripts sont appelées des variables de script. Ces variables permettent à un script d'être utilisé dans plusieurs scénarios. Par exemple, pour exécuter un script sur plusieurs serveurs, vous pouvez utiliser une variable de script pour le nom du serveur au lieu de modifier le script pour chaque serveur. La modification du nom de serveur fourni à la variable de script permet d'exécuter le même script sur différents serveurs.
Les variables de script peuvent être définies explicitement à l’aide de la setvar commande ou implicitement à l’aide de l’option sqlcmd -v .
Cet article inclut également des exemples de définition de variables environnementales sur la ligne de commande à l’aide SETde .
Définir des variables de script à l’aide de la commande setvar
La setvar commande définit des variables de script. Les variables définies à l’aide de la setvar commande sont stockées en interne. Il ne faut pas confondre les variables de script avec les variables d’environnement qui sont définies dans l’invite de commandes à l’aide de SET. Si un script référence une variable qui n’est pas une variable d’environnement ou n’est pas définie à l’aide setvar, un message d’erreur est retourné et l’exécution du script s’arrête. Pour plus d'informations, consultez l'option -b dans sqlcmd.
Priorité des variables (faible à élevée)
Si plusieurs types de variables ont le même nom, la variable dont la priorité est la plus élevée est utilisée.
- Variables d'environnement de niveau système
- Variables d'environnement de niveau utilisateur
- Shell de commande (
SET X=Y) défini à l'invite de commande avant de démarrer sqlcmd sqlcmd -v X=Y:Setvar X Y
Note
Pour afficher les variables environnementales sur Windows 11, ouvrez Paramètres, puis accédez à System>About, puis sélectionnez le lien Paramètres système avancés . Dans la fenêtre Propriétés système, sélectionnez Variables d’environnement. Sur Linux, tapez printenv sur la ligne de commande et, dans macOS, tapez env.
Définir implicitement des variables de script
Lorsque vous démarrez sqlcmd avec une option associée à une variable sqlcmd , la variable sqlcmd prend implicitement la valeur spécifiée par l’option. Dans l'exemple suivant, sqlcmd démarre avec l'option -l . Cette opération définit implicitement la variable SQLLOGINTIMEOUT.
sqlcmd -l 60
Vous pouvez également utiliser l’option -v pour définir une variable de script qui existe dans un script. Dans le script suivant (le nom de fichier est testscript.sql), ColumnName représente une variable de script.
USE AdventureWorks2022;
SELECT x.$(ColumnName)
FROM Person.Person x
WHERE x.BusinessEntityID < 5;
Vous pouvez ensuite spécifier le nom de la colonne à retourner à l'aide de l'option -v :
sqlcmd -v ColumnName ="FirstName" -i c:\testscript.sql
Pour retourner une autre colonne à l'aide du même script, modifiez la valeur de la variable de script ColumnName .
sqlcmd -v ColumnName ="LastName" -i c:\testscript.sql
Instructions pour les noms et valeurs de variables de script
Lorsque vous nommez des variables de script, tenez compte des instructions suivantes :
Les noms de variables ne doivent pas contenir d'espaces blancs ou de guillemets.
Les noms de variables ne peuvent pas avoir la même forme qu’une expression de variable, telle que $(var) .
Les variables de script ne sont pas sensibles à la casse
Note
Si aucune valeur n’est affectée à une variable d’environnement sqlcmd , la variable est supprimée. L’utilisation de
:setvar VarNamesans valeur efface la variable.
Lorsque vous spécifiez des valeurs pour des variables de script, tenez compte des instructions suivantes :
- Les valeurs de variable définies à l’aide
setvarou l’option-vdoivent être placées entre guillemets si la valeur de chaîne contient des espaces. - Si la valeur de variable contient des guillemets, ceux-ci doivent être placés dans une séquence d'échappement. Par exemple :
setvar MyVar "spac""e".
Recommandations pour les valeurs et les noms des variables dans cmd.exe SET
Les variables définies à l’aide de SET appartiennent à l’environnement cmd.exe et peuvent être référencées par sqlcmd. Tenez compte des recommandations suivantes :
- Les noms de variables ne doivent pas contenir d'espaces blancs ou de guillemets.
- Les valeurs de variable peuvent contenir des espaces ou des guillemets.
Variables de script SQLCMD
| Variable | Option associée | R/W | Default |
|---|---|---|---|
SQLCMDUSER
1 |
-U |
R
2 |
"" |
SQLCMDPASSWORD
1 |
-P |
-- |
"" |
SQLCMDSERVER
1 |
-S |
R
2 |
"DefaultLocalInstance" |
SQLCMDWORKSTATION |
-H |
R
2 |
"ComputerName" |
SQLCMDDBNAME |
-d |
R
2 |
"" |
SQLCMDLOGINTIMEOUT |
-l |
R/W
3 |
« 8 » (secondes) |
SQLCMDSTATTIMEOUT |
-t |
R/W
3 |
"0" = Attendre indéfiniment |
SQLCMDHEADERS |
-h |
R/W
3 |
"0" |
SQLCMDCOLSEP |
-s |
R/W
3 |
" " |
SQLCMDCOLWIDTH |
-w |
R/W
3 |
"0" |
SQLCMDPACKETSIZE |
-a |
R
2 |
"4096" |
SQLCMDERRORLEVEL |
-m |
R/W
3 |
"0" |
SQLCMDMAXVARTYPEWIDTH |
-y |
R/W
3 |
"256" |
SQLCMDMAXFIXEDTYPEWIDTH |
-Y |
R/W
3 |
"0" = illimitée |
SQLCMDEDITOR |
R/W
3 |
"edit.com" | |
SQLCMDINI |
R
2 |
"" |
1 Les variables SQLCMDUSER, SQLCMDPASSWORD et SQLCMDSERVER sont définies lorsque la commande :Connect est utilisée.
2 R indique que la valeur ne peut être définie qu'une seule fois lors de l'initialisation du programme.
3 R/W indique que la valeur peut être réinitialisée à l’aide de la setvar commande et des commandes suivantes utilisent la nouvelle valeur.
Examples
Les exemples de code de cet article utilisent les bases de données d'exemple AdventureWorks2025 ou AdventureWorksDW2025, que vous pouvez télécharger à partir de la page d'accueil Microsoft SQL Server Samples and Community Projects.
A. Utiliser la commande setvar dans un script
De nombreuses options de sqlcmd peuvent être contrôlées dans un script à l’aide de la commande setvar . Dans l'exemple suivant, le script test.sql est créé ; dans ce dernier, la variable SQLCMDLOGINTIMEOUT a la valeur 60 secondes et une variable de script, server, a la valeur testserver. Le code suivant figure dans le fichier test.sql.
:setvar SQLCMDLOGINTIMEOUT 60
:setvar server "testserver"
:connect $(server) -l $(SQLCMDLOGINTIMEOUT)
USE AdventureWorks2022;
SELECT FirstName, LastName
FROM Person.Person;
Le script est alors appelé avec sqlcmd :
sqlcmd -i c:\test.sql
B. Utiliser la commande setvar de façon interactive
L'exemple suivant illustre la définition d'une variable de script de façon interactive à l'aide de la commande setvar .
sqlcmd
:setvar MYDATABASE AdventureWorks2022
USE $(MYDATABASE);
GO
Voici l'ensemble des résultats.
Changed database context to 'AdventureWorks2022'
1>
C. Utiliser les variables d'environnement d'invite de commande dans sqlcmd
Dans l’exemple suivant, quatre variables d’environnement (are) sont définies puis appelées depuis sqlcmd.
SET tablename=Person.Person
SET col1=FirstName
SET col2=LastName
SET title=Ms.
sqlcmd -d AdventureWorks2022
1> SELECT TOP 5 $(col1) + ' ' + $(col2) AS Name
2> FROM $(tablename)
3> WHERE Title ='$(title)'
4> GO
D. Utiliser des variables d’environnement au niveau utilisateur dans sqlcmd
Dans l'exemple suivant, la variable d'environnement au niveau utilisateur %Temp% est définie à l'invite de commandes et transmise au fichier d'entrée sqlcmd . Pour obtenir la variable d’environnement au niveau utilisateur, dans le Panneau de configuration, double-cliquez sur Système. Sélectionnez l’onglet Avancé, puis Variables d’environnement.
Le code suivant figure dans le fichier d'entrée C:\testscript.txt:
:OUT $(MyTempDirectory)
USE AdventureWorks2022;
SELECT FirstName
FROM AdventureWorks2022.Person.Person
WHERE BusinessEntityID < 5;
Le code suivant doit être entré à l'invite de commandes :
SET MyTempDirectory=%Temp%\output.txt
sqlcmd -i C:\testscript.txt
Le résultat suivant est envoyé au fichier de sortie C:\Documents and Settings\<user>\Local Settings\Temp\output.txt.
Changed database context to 'AdventureWorks2022'.
FirstName
--------------------------------------------------
Gustavo
Catherine
Kim
Humberto
(4 rows affected)
E. Utiliser un script de démarrage
Un script de démarrage sqlcmd est exécuté au démarrage de sqlcmd . L'exemple suivant définit la variable d'environnement SQLCMDINI. Voici le contenu de init.sql.
SET NOCOUNT ON
GO
DECLARE @nt_username nvarchar(128)
SET @nt_username = (SELECT rtrim(convert(nvarchar(128), nt_username))
FROM sys.dm_exec_sessions WHERE spid = @@SPID)
SELECT @nt_username + ' is connected to ' +
rtrim(CONVERT(nvarchar(20), SERVERPROPERTY('servername'))) +
' (' +`
rtrim(CONVERT(nvarchar(20), SERVERPROPERTY('productversion'))) +
')'
:setvar SQLCMDMAXFIXEDTYPEWIDTH 100
SET NOCOUNT OFF
GO
:setvar SQLCMDMAXFIXEDTYPEWIDTH
Ce code appelle le fichier init.sql au démarrage de sqlcmd .
SET sqlcmdini=c:\init.sql
sqlcmd
Voici le résultat.
1> <user> is connected to <server> (9.00.2047.00)
Note
L’option -X désactive la fonctionnalité de script de démarrage.
F. Extension des variables
l’exemple suivant illustre l’utilisation de données sous la forme d’une variable sqlcmd .
USE AdventureWorks2022;
GO
CREATE TABLE AdventureWorks2022.dbo.VariableTest (Col1 NVARCHAR(50));
GO
Insérez une ligne dans Col1 de dbo.VariableTest qui contient la valeur $(tablename).
INSERT INTO AdventureWorks2022.dbo.VariableTest (Col1)
VALUES ('$(tablename)');
GO
À l’invite sqlcmd, si aucune variable n’est définie pour $(tablename), les instructions suivantes affichent la ligne et affichent également le message « La variable de script 'nom du tableau' n’est pas définie ». Par défaut, l’indicateur sqlcmd-b n’est pas défini. Si -b est défini, sqlcmd se termine après l’erreur « variable non définie ».
sqlcmd
1> SELECT Col1 FROM dbo.VariableTest WHERE Col1 = '$(tablename)';
2> GO
3> SELECT Col1 FROM dbo.VariableTest WHERE Col1 = N'$(tablename)';
4> GO
Voici l'ensemble des résultats.
1> Col1
2> ------------------
3> $(tablename)
4>
5> (1 rows affected)
Étant donné que la variable MyVar est définie sur $(tablename).
6> :setvar MyVar $(tablename)
Ces instructions retournent la ligne ainsi que le message « La variable de script « tablename » n'est pas définie ».
6> SELECT Col1 FROM dbo.VariableTest WHERE Col1 = '$(tablename)';
7> GO
1> SELECT Col1 FROM dbo.VariableTest WHERE Col1 = N'$(tablename)';
2> GO
Ces instructions renvoient la ligne.
1> SELECT Col1 FROM dbo.VariableTest WHERE Col1 = '$(MyVar)';
2> GO
1> SELECT Col1 FROM dbo.VariableTest WHERE Col1 = N'$(MyVar)';
2> GO
Contenu connexe
- En savoir plus sur l’utilitaire sqlcmd (Go) sur GitHub
- 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 l’utilitaire
- Utiliser sqlcmd avec des variables de script
- Se connecter à SQL Server avec sqlcmd
- Modifier des scripts SQLCMD à l'aide de l'Éditeur de requête
- Gérer les étapes du travail
- Créer une étape de tâche CmdExec