Utiliser sqlcmd
S’applique à : SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
sqlcmd est un utilitaire de ligne de commande destiné à l’exécution ad hoc et interactive des instructions et des scripts Transact-SQL (T-SQL), ainsi qu’à l’automatisation des tâches de script T-SQL. Pour utiliser sqlcmd de façon interactive ou pour créer des fichiers de script pour sqlcmd, vous devriez connaître T-SQL. Vous pouvez utiliser sqlcmd de différentes manières. Par exemple :
Saisissez des instructions T-SQL à partir de l’invite de commandes. La console retourne les résultats. Pour ouvrir une fenêtre d’invite de commandes, entrez
cmd
dans la zone de recherche de Windows, puis sélectionnez Invite de commandes. À l'invite de commandes, tapezsqlcmd
suivi d'une liste des options de votre choix. Pour obtenir la liste complète des options prises en charge par l’utilitaire sqlcmd, consultez Utilitaire sqlcmd.Soumettez une tâche sqlcmd soit en spécifiant une instruction T-SQL unique à exécuter, soit en indiquant à l’utilitaire un fichier texte contenant les instructions T-SQL à exécuter. La sortie est envoyée dans un fichier texte, mais elle peut aussi être affichée à l’invite de commandes.
Mode SQLCMD dans l’Éditeur de requête SQL Server Management Studio (SSMS).
SQL Server Management Objects (SMO).
Travaux CmdExec de SQL Server Agent.
Options sqlcmd courantes
L’option de serveur (
-S
) identifie l’instance de Microsoft SQL Server à laquelle l’utilitaire sqlcmd se connecte.Les options d’authentification (
-E
,-U
, et-P
) définissent les informations d’identification qu’utilise sqlcmd pour se connecter à l’instance de SQL Server.Remarque
L’option
-E
est la valeur par défaut et n’a pas besoin d’être spécifiée.Les options d’entrée (
-Q
,-q
, et-i
) identifient l’emplacement de l’entrée dans sqlcmd.L’option de sortie (
-o
) spécifie le fichier dans lequel sqlcmd doit placer sa sortie.
Se connecter à l’utilitaire sqlcmd
Connexion à une instance par défaut à l’aide de l’authentification Windows pour exécuter de manière interactive des instructions T-SQL :
sqlcmd -S <ComputerName>
Remarque
Dans l’exemple précédent,
-E
n’est pas définie, car il s’agit de l’option par défaut, et sqlcmd s’y connecte en utilisant l’authentification Windows.Connexion à une instance nommée à l’aide de l’authentification Windows pour exécuter de manière interactive des instructions T-SQL :
sqlcmd -S <ComputerName>\<InstanceName>
or
sqlcmd -S .\<InstanceName>
Connexion à une instance nommée en utilisant l'authentification Windows et définition des fichiers d'entrée et de sortie :
sqlcmd -S <ComputerName>\<InstanceName> -i <MyScript.sql> -o <MyOutput.rpt>
Connexion à l'instance par défaut sur l'ordinateur local avec l'authentification Windows, exécution d'une requête et maintien de sqlcmd actif à la fin de la requête :
sqlcmd -q "SELECT * FROM AdventureWorks2022.Person.Person"
Connexion à l'instance par défaut sur l'ordinateur local avec l'authentification Windows, exécution d'une requête, envoi de la sortie vers un fichier et fin de l'exécution de sqlcmd à la fin de la requête :
sqlcmd -Q "SELECT * FROM AdventureWorks2022.Person.Person" -o MyOutput.txt
Connexion à une instance nommée à l’aide de l’authentification SQL Server pour exécuter des instructions T-SQL de manière interactive, avec sqlcmd invitant à entrer un mot de passe :
sqlcmd -U MyLogin -S <ComputerName>\<InstanceName>
Conseil
Pour obtenir une liste des options prises en charge par l’utilitaire sqlcmd , exécutez
sqlcmd -?
.
Exécuter des instructions Transact-SQL de manière interactive à l’aide de sqlcmd
Vous pouvez utiliser l’utilitaire sqlcmd interactivement pour exécuter des instructions T-SQL dans une fenêtre d’invite de commandes. Pour exécuter interactivement des instructions Transact-SQL à l’aide de sqlcmd, exécutez l’utilitaire sans utiliser les options -Q
, -q
, -Z
ou -i
pour spécifier des fichiers ou des requêtes d’entrée. Par exemple :
sqlcmd -S <ComputerName>\<InstanceName>
Lorsque la commande est exécutée sans fichiers ou requêtes d’entrée, sqlcmd se connecte à l’instance spécifiée de SQL Server et affiche ensuite une nouvelle ligne comportant un 1>
suivi d’un trait de soulignement clignotant, appelé invite sqlcmd. Le 1
signifie qu’il s’agit de la première ligne d’une instruction T-SQL. L’invite sqlcmd représente le point à partir duquel l’instruction T-SQL commence quand vous la tapez.
À l’invite sqlcmd, vous pouvez taper à la fois des instructions T-SQL et des commandes sqlcmd, comme GO
et EXIT
. Chaque instruction T-SQL est placée dans une mémoire tampon, appelée cache d’instruction. Ces instructions sont envoyées à SQL Server dès lors que vous avez tapé la commande GO
et appuyé sur la touche ENTRÉE. Pour quitter sqlcmd, tapez EXIT
ou QUIT
au début d'une nouvelle ligne.
Pour effacer le cache d'instruction, tapez :RESET
. Taper Ctrl+C provoque la fin de sqlcmd. Ctrl+C peut également être utilisé pour arrêter l'exécution du cache d'instruction après la saisie d'une commande GO
.
Les instructions T-SQL entrées dans une session interactive peuvent être modifiées en entrant la commande :ED
et l’invite sqlcmd. L’éditeur s’ouvre et après avoir modifié l’instruction T-SQL et refermé l’éditeur, l’instruction T-SQL révisée s’affiche dans la Fenêtre Commande. Entrez GO
pour exécuter l’instruction T-SQL.
Chaînes entre guillemets
Les caractères entourés par des guillemets sont utilisés sans autre prétraitement, à l'exception des guillemets insérés au sein d'une chaîne en entrant deux guillemets consécutifs. SQL Server traite cette séquence de caractères comme un seul guillemet. (La traduction s’effectue toutefois sur le serveur). Les variables des scripts ne sont pas développées lorsqu’elles apparaissent au sein d’une chaîne.
Par exemple :
sqlcmd
PRINT "Length: 5"" 7'";
GO
Voici le jeu de résultats.
Length: 5" 7'
Chaînes qui s’étendent sur plusieurs lignes
sqlcmd prend en charge les chaînes qui s'étendent sur plusieurs lignes. Par exemple, l'instruction SELECT
suivante s'étend sur plusieurs lignes mais exécute une seule chaîne lorsque vous saisissez GO
puis appuyez sur ENTRÉE.
SELECT <First line>
FROM <Second line>
WHERE <Third line>;
GO
Exemple d’utilisation interactive de sqlcmd
Il s'agit d'un exemple de ce que vous voyez lorsque vous exécutez sqlcmd interactivement.
Lorsque vous ouvrez une fenêtre d’invite de commandes, elle ne comporte qu’une seule ligne similaire à la ligne suivante :
C:\Temp\>
Cela signifie que C:\Temp\
est le dossier en cours et que si vous spécifiez un nom de fichier, Windows l’y recherche.
Tapez sqlcmd pour vous connecter à l'instance par défaut de SQL Server située sur l'ordinateur local. Le contenu de la fenêtre d'invite de commandes sera alors :
C:\Temp>sqlcmd
1>
Cela signifie que vous vous êtes connecté à l’instance de SQL Server et que sqlcmd est maintenant prêt à accepter des instructions T-SQL et des commandes sqlcmd. Le trait de soulignement clignotant situé après 1>
est l'invite de sqlcmd qui marque l'emplacement où les instructions et les commandes que vous tapez sont affichées. À présent, tapez USE AdventureWorks2022
et appuyez sur Entrée, puis tapez GO
et appuyez sur Entrée. La fenêtre d'invite de commandes affiche les éléments suivants :
sqlcmd
USE AdventureWorks2022;
GO
Voici le jeu de résultats.
Changed database context to 'AdventureWorks2022'.
1>
Le fait d’appuyer sur Entrée signale à sqlcmd de démarrer une nouvelle ligne. Le fait d'appuyer sur la touche Entrée après avoir tapé GO
revient à demander à sqlcmd d'envoyer l'instruction USE AdventureWorks2022
à l'instance de SQL Server. sqlcmd retourne alors un message pour indiquer que l'instruction USE
a correctement abouti et affiche une nouvelle invite 1>
qui vous signale que vous pouvez entrer une nouvelle instruction ou une nouvelle commande.
L'exemple suivant affiche le contenu de la fenêtre d'invite de commandes si vous tapez une instruction SELECT
, une commande GO
pour exécuter SELECT
et une commande EXIT
pour quitter sqlcmd :
USE AdventureWorks2022;
GO
SELECT TOP (3) BusinessEntityID, FirstName, LastName
FROM Person.Person;
GO
Voici le jeu de résultats.
BusinessEntityID FirstName LastName
----------------- ---------- ------------
1 Syed Abbas
2 Catherine Abel
3 Kim Abercrombie
Une fois les données de sortie générées, sqlcmd réinitialise l'invite sqlcmd et affiche 1>
. Pour terminer la session, saisissez EXIT
sur l’invite 1>
. Vous pouvez maintenant fermer la fenêtre d'invite de commandes en tapant une autre commande EXIT
.
Créer un conteneur SQL Server et y effectuer une requête
Vous pouvez utiliser sqlcmd (Go) pour créer une instance de SQL Server dans un conteneur. sqlcmd (Go) expose une instruction create
qui vous permet de spécifier une image conteneur et une sauvegarde SQL Server, afin de créer rapidement une instance SQL Server à des fins de développement, de débogage et d’analyse.
La commande suivante montre comment afficher toutes les options disponibles pour créer un conteneur SQL Server :
sqlcmd create mssql --help
La commande suivante crée une instance SQL Server à l’aide de la dernière version de SQL Server 2022 (16.x), puis restaure l’exemple de base de données Wide World Importers :
sqlcmd create mssql --accept-eula --tag 2022-latest --using https://github.com/Microsoft/sql-server-samples/releases/download/wide-world-importers-v1.0/WideWorldImporters-Full.bak
Une fois l’instance SQL Server créée, vous pouvez utiliser sqlcmd (Go) pour la gérer et y effectuer des requêtes.
La commande suivante confirme la version de l’instance créée :
sqlcmd query "SELECT @@version"
La commande suivante démarre une session interactive avec l’instance créée :
sqlcmd query
La commande suivante ouvre Azure Data Studio et se connecte automatiquement à la base de données qui a été restaurée pendant le processus de création :
sqlcmd open ads
La commande suivante répertorie les chaînes de connexion à utiliser pour se connecter à l’instance créée :
sqlcmd config connection-strings
La commande suivante permet de supprimer le conteneur Docker lorsqu’il n’est plus nécessaire :
sqlcmd delete
Exécuter des fichiers de script Transact-SQL à l’aide de sqlcmd
Vous pouvez utiliser sqlcmd pour exécuter des fichiers de script de base de données. Il s’agit de fichiers texte contenant un mélange d’instructions T-SQL, de commandes sqlcmd et de variables de script. Pour plus d’informations sur la façon de générer un script pour des variables, consultez Utiliser sqlcmd avec des variables de script. sqlcmd fonctionne avec les instructions, les commandes et les variables de script contenues dans un fichier de script de manière très similaire à son fonctionnement avec des instructions et des commandes entrées de manière interactive. La principale différence est que sqlcmd lit le fichier d'entrée sans marquer de pause au lieu d'attendre que l'utilisateur entre les instructions, les commandes et les variables de script.
Il existe plusieurs manières de créer des fichiers de script de base de données :
Vous pouvez créer et déboguer de manière interactive un ensemble d’instructions T-SQL dans SQL Server Management Studio, puis enregistrer le contenu de la fenêtre Requête en tant que fichier de script.
Vous pouvez créer un fichier texte contenant des instructions T-SQL à l’aide d’un éditeur de texte comme le Bloc-notes.
Exemples
R. Exécuter un script à l’aide de sqlcmd
Démarrez le Bloc-notes et tapez les instructions T-SQL suivantes :
USE AdventureWorks2022;
GO
SELECT TOP (3) BusinessEntityID, FirstName, LastName
FROM Person.Person;
GO
Créez un dossier intitulé MyFolder
puis enregistrez le script sous le fichier MyScript.sql
dans le dossier C:\MyFolder
. Entrez les instructions suivantes dans l'invite de commandes pour exécuter le script et enregistrer la sortie dans MyOutput.txt
dans MyFolder
:
sqlcmd -i C:\MyFolder\MyScript.sql -o C:\MyFolder\MyOutput.txt
Voici le jeu de résultats.
Changed database context to 'AdventureWorks2022'.
BusinessEntityID FirstName LastName
----------------- ---------- ------------
1 Syed Abbas
2 Catherine Abel
3 Kim Abercrombie
(3 rows affected)
B. Utiliser sqlcmd avec une connexion d’administration dédiée
Dans l'exemple suivant, sqlcmd permet de se connecter à un serveur ayant un problème de blocage en utilisant la connexion administrateur dédiée.
C:\Temp\>sqlcmd -S ServerName -A
1> SELECT session_id, blocking_session_id FROM `sys.dm_exec_requests` WHERE blocking_session_id <> 0;
2> GO
Voici le jeu de résultats.
session_id blocking_session_id
----------- --------------------`
62 64
(1 rows affected)
Utilisez sqlcmd pour mettre fin au processus de blocage.
1> KILL 64;
2> GO
C. Utiliser sqlcmd pour exécuter une procédure stockée
L'exemple suivant montre comment exécuter une procédure stockée à l'aide de sqlcmd. Créez la procédure stockée suivante.
USE AdventureWorks2022;
GO
IF OBJECT_ID('dbo.ContactEmailAddress', 'P') IS NOT NULL
DROP PROCEDURE dbo.ContactEmailAddress;
GO
CREATE PROCEDURE dbo.ContactEmailAddress (
@FirstName NVARCHAR(50),
@LastName NVARCHAR(50)
)
AS
SET NOCOUNT ON;
SELECT EmailAddress
FROM Person.Person
WHERE FirstName = @FirstName
AND LastName = @LastName;
SET NOCOUNT OFF;
GO
À l'invite sqlcmd, entrez :
C:\Temp\sqlcmd
1> :Setvar FirstName Gustavo
1> :Setvar LastName Achong
1> EXEC dbo.ContactEmailAddress $(FirstName),$(LastName)
2> GO
EmailAddress
-----------------------------
gustavo0@adventure-works.com
D. Utiliser sqlcmd pour la maintenance de base de données
L'exemple suivant montre comment utiliser sqlcmd pour une tâche de maintenance de base de données. Créez C:\Temp\BackupTemplate.sql
à l'aide du code suivant.
USE master;
BACKUP DATABASE [$(db)] TO DISK='$(bakfile)';
Dans l’invite sqlcmd, saisissez le code suivant :
C:\Temp\>sqlcmd
1> :connect <server>
Sqlcmd: Successfully connected to server <server>.
1> :setvar db msdb
1> :setvar bakfile C:\Temp\msdb.bak
1> :r C:\Temp\BackupTemplate.sql
2> GO
Changed database context to 'master'.
Processed 688 pages for database 'msdb', file 'MSDBData' on file 2.
Processed 5 pages for database 'msdb', file 'MSDBLog' on file 2.
BACKUP DATABASE successfully processed 693 pages in 0.725 seconds (7.830 MB/sec)
E. Utiliser sqlcmd pour exécuter du code sur plusieurs instances
Le code suivant dans un fichier illustre la connexion d'un script à deux instances. Notez GO
avant la connexion à la deuxième instance.
:CONNECT <server>\,<instance1>
EXEC dbo.SomeProcedure
GO
:CONNECT <server>\,<instance2>
EXEC dbo.SomeProcedure
GO
E. Retourner la sortie XML
L'exemple suivant montre comment la sortie XML est retournée, sans mise en forme, dans un flux continu.
C:\Temp\>sqlcmd -d AdventureWorks2022
1> :XML ON
1> SELECT TOP 3 FirstName + ' ' + LastName + ', '
2> FROM Person.Person
3> GO
Syed Abbas, Catherine Abel, Kim Abercrombie,
F. Utiliser sqlcmd dans un fichier de script Windows
Une commande sqlcmd telle que sqlcmd -i C:\Temp\InputFile.txt -o C:\Temp\OutputFile.txt,
peut s'exécuter dans un fichier .bat en même temps que VBScript. Dans ce cas, n’utilisez pas les options interactives. sqlcmd doit être installé sur l'ordinateur qui exécute le fichier .bat.
Commencez par créer les quatre fichiers suivants dans C:\Temp
:
C:\Temp\badscript.sql
SELECT batch_1_this_is_an_error GO SELECT 'batch #2' GO
C:\Temp\goodscript.sql
SELECT 'batch #1'; GO SELECT 'batch #2'; GO
C:\Temp\returnvalue.sql
:exit(select 100)
C:\Temp\windowsscript.bat
@echo off echo Running badscript.sql sqlcmd -i badscript.sql -b -o out.log if not errorlevel 1 goto next1 echo == An error occurred :next1 echo Running goodscript.sql sqlcmd -i goodscript.sql -b -o out.log if not errorlevel 1 goto next2 echo == An error occurred :next2 echo Running returnvalue.sql sqlcmd -i returnvalue.sql -o out.log echo SQLCMD returned %errorlevel% to the command shell :exit
Puis, à l'invite de commandes, exécutez C:\Temp\windowsscript.bat
:
C:\Temp\>windowsscript.bat
Running badscript.sql
== An error occurred
Running goodscript.sql
Running returnvalue.sql
SQLCMD returned 100 to the command shell
G. Utiliser sqlcmd pour définir le chiffrement sur Azure SQL Database
Une commande sqlcmd peut être exécutée sur une connexion aux données SQL Database pour spécifier le chiffrement et l'approbation de certificat. Deux options sqlcmd sont disponibles :
Le commutateur
-N
est utilisé par le client pour demander une connexion chiffrée. Cette option est équivalente à l'option ADO.netENCRYPT = true
.Le commutateur
-C
est utilisé par le client pour le configurer de façon à approuver implicitement le certificat de serveur sans pour autant le valider. Cette option est équivalente à l'option ADO.netTRUSTSERVERCERTIFICATE = true
.
Le service SQL Database ne prend pas en charge toutes les options SET
disponibles sur une instance SQL Server. Les options suivantes provoquent une erreur lorsque l'option SET
correspondante est définie sur ON
ou OFF
:
SET ANSI_DEFAULTS
SET ANSI_NULLS
SET REMOTE_PROC_TRANSACTIONS
SET ANSI_NULL_DEFAULT
Les options SET suivantes ne lèvent pas d’exceptions mais ne peuvent pas être utilisées. Elles sont déconseillées :
SET CONCAT_NULL_YIELDS_NULL
SET ANSI_PADDING
SET QUERY_GOVERNOR_COST_LIMIT
Syntaxe
Les exemples suivants font référence à des cas où les paramètres du fournisseur SQL Server Native Client incluent :
ForceProtocolEncryption = False
Trust Server Certificate = No
Connexion à l'aide des informations d'identification Windows et d'une communication chiffrée :
sqlcmd -E -N
Connexion à l'aide des informations d'identification Windows et d'un certificat de serveur de confiance :
sqlcmd -E -C
Connexion à l'aide des informations d'identification Windows, d'une communication chiffrée et d'un certificat de serveur de confiance :
sqlcmd -E -N -C
Les exemples suivants font référence à des cas où les paramètres du fournisseur SQL Server Native Client incluent :
ForceProtocolEncryption = True
TrustServerCertificate = Yes
Connexion à l'aide des informations d'identification Windows, d'une communication chiffrée et d'un certificat de serveur de confiance :
sqlcmd -E
Connexion à l'aide des informations d'identification Windows, d'une communication chiffrée et d'un certificat de serveur de confiance :
sqlcmd -E -N
Connexion à l'aide des informations d'identification Windows, d'une communication chiffrée et d'un certificat de serveur de confiance :
sqlcmd -E -C
Connexion à l'aide des informations d'identification Windows, d'une communication chiffrée et d'un certificat de serveur de confiance :
sqlcmd -E -N -C
Si le fournisseur spécifie ForceProtocolEncryption = True
, alors le chiffrement est activé même si Encrypt=No
est indiqué dans la chaîne de connexion.