Utiliser l'utilitaire sqlcmd

L’utilitaire sqlcmd est un utilitaire de ligne de commande pour l’exécution ad hoc et interactive d’instructions et de scripts Transact-SQL et pour l’automatisation des tâches de script Transact-SQL. Pour une utilisation sqlcmd interactive ou pour générer des fichiers de script à exécuter à l’aide sqlcmdde , les utilisateurs doivent comprendre Transact-SQL. L'utilitaire sqlcmd est généralement utilisé des façons suivantes :

  • Les utilisateurs entrent de manière interactive des instructions Transact-SQL d’une manière similaire à l’utilisation à l’invite de commandes. Les résultats s'affichent dans l'invite de commandes. Pour ouvrir une fenêtre d'invite de commandes, cliquez sur Démarrer, sur Tous les programmes, pointez sur Accessoires, puis cliquez sur Invite de commandes. À l'invite de commandes, tapez sqlcmd suivi d'une liste des options de votre choix. Pour obtenir la liste complète des options prises en charge par sqlcmd, consultez utilitaire sqlcmd.

  • Les utilisateurs envoient un sqlcmd travail en spécifiant une instruction Transact-SQL unique à exécuter, ou en pointant l’utilitaire vers un fichier texte contenant des instructions Transact-SQL à exécuter. Le résultat est généralement généré dans un fichier texte, mais il peut aussi être affiché dans l'invite de commandes.

  • Mode SQLCMD dans l’Éditeur de requête SQL Server Management Studio.

  • SMO (SQL Server Management Objects)

  • Travaux CmdExec de SQL Server Agent.

Options sqlcmd courantes

Les options suivantes sont les plus fréquemment utilisées :

  • Option de serveur (-S) qui identifie le instance de Microsoft SQL Server auquel sqlcmd se connecte.

  • Options d’authentification (-E, -U et -P) qui spécifient les informations d’identification qui sqlcmd utilisent pour se connecter au instance de SQL Server.

    Notes

    L’option -E est l’option par défaut et il n’est pas nécessaire de la définir.

  • Options d’entrée (-Q, -q et -i) qui identifient l’emplacement de l’entrée dans sqlcmd.

  • Option de sortie (-o) qui spécifie le fichier dans lequel sqlcmd doit placer sa sortie.

Connexion à l'utilitaire sqlcmd

Ci-dessous figurent quelques utilisations courantes de l'utilitaire sqlcmd :

  • Connexion à une instance par défaut à l’aide de l’authentification Windows pour exécuter de manière interactive des instructions Transact-SQL :

    sqlcmd -S <ComputerName>  
    

    Notes

    Dans l’exemple précédent, -E n’est pas spécifié, car il s’agit de la valeur par défaut et sqlcmd se connecte à la instance par défaut à l’aide de l’authentification Windows.

  • Connexion à une instance nommée à l’aide de l’authentification Windows pour exécuter de manière interactive des instructions Transact-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 à l'aide de l'authentification Windows, exécution d'une requête et maintien de sqlcmd actif à la fin de la requête :

    sqlcmd -q "SELECT * FROM AdventureWorks2012.Person.Person"  
    
  • Connexion à l'instance par défaut sur l'ordinateur local à l'aide de 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 AdventureWorks2012.Person.Person" -o MyOutput.txt  
    
  • La connexion à un instance nommé à l’aide de l’authentification SQL Server pour exécuter de manière interactive des instructions Transact-SQL, avec sqlcmd une invite de mot de passe :

    sqlcmd -U MyLogin -S <ComputerName>\<InstanceName>  
    

    Notes

    Pour obtenir une liste des options prises en charge par l'utilitaire sqlcmd, exécutez sqlcmd -?.

Exécution d'instructions Transact-SQL interactivement à l'aide de sqlcmd

Vous pouvez utiliser l’utilitaire sqlcmd de manière interactive pour exécuter des instructions Transact-SQL dans une fenêtre d’invite de commandes. Pour exécuter de manière interactive des instructions Transact-SQL à l’aide sqlcmdde , 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 d’entrée ni requêtes, sqlcmd se connecte à la instance spécifiée de SQL Server, puis affiche une nouvelle ligne avec un 1> suivi d’un trait de soulignement clignotant nommé l’invitesqlcmd. signifie 1 qu’il s’agit de la première ligne d’une instruction Transact-SQL, et que l’invite sqlcmd est le point auquel l’instruction Transact-SQL démarre lorsque vous la tapez.

À l’invite sqlcmd , vous pouvez taper des instructions et sqlcmd des commandes Transact-SQL, telles que GO et EXIT. Chaque instruction Transact-SQL est placée dans une mémoire tampon, appelée cache d’instruction. Ces instructions sont envoyées à SQL Server après avoir tapé la GO commande et appuyé sur ENTRÉE. Pour quitter sqlcmd, tapez EXIT ou QUIT au début d’une nouvelle ligne.

Pour effacer le cache d'instruction, tapez :RESET. La saisie ^C entraîne sqlcmd la fermeture. ^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 Transact-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 Transact-SQL et refermé l’éditeur, l’instruction Transact-SQL révisée s’affiche dans la Fenêtre Commande. Entrez GO pour exécuter l’instruction Transact-SQL supervisée.

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

Length: 5" 7'

Chaînes qui s'étendent sur plusieurs lignes

sqlcmd prend en charge les scripts comportant des chaînes qui s'étendent sur plusieurs lignes. Par exemple, l'instruction SELECT suivante s'étend sur plusieurs lignes mais constitue une seule chaîne exécutée lorsque vous appuyez sur la touche ENTRÉE après avoir tapé GO.

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:\> _

Cela signifie que le dossier C:\ est le dossier en cours et que si vous spécifiez un nom de fichier, Windows recherchera le fichier dans ce dossier.

Tapez sqlcmd pour vous connecter à la instance par défaut de SQL Server sur l’ordinateur local, et le contenu de la fenêtre d’invite de commandes sera :

C:\>sqlcmd

1> _

Cela signifie que vous vous êtes connecté à l’instance de SQL Server et que sqlcmd est maintenant prêt à accepter des instructions Transact-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 AdventureWorks2012 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 AdventureWorks2012;

GO

Voici le jeu de résultats obtenu.

Changed database context to 'AdventureWorks2012'.

1> _

Appuyer sur la touche ENTRÉE après avoir tapé USE AdventureWorks2012 correspond à demander à sqlcmd de commencer 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 AdventureWorks2012 à 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 SELECTet une commande EXIT pour quitter sqlcmd:

sqlcmd

USE AdventureWorks2012;

GO

SELECT TOP (3) BusinessEntityID, FirstName, LastName

FROM Person.Person;

GO

Voici le jeu de résultats obtenu.

BusinessEntityID FirstName LastName

----------- -------------------------------- -----------

1 Syed Abbas

2 Catherine Abel

3 Kim Abercrombie

(3 rows affected)

1> EXIT

C:\>

Les lignes situées après la ligne 3> GO sont les données de sortie d'une instruction SELECT . Une fois les données de sortie générées, sqlcmd réinitialise l'invite sqlcmd et affiche 1>. Après avoir entré EXIT sur la ligne 1>, la fenêtre d'invite de commandes affiche la même ligne que celle qu'elle a affichée lorsque vous avez ouvert l'invite de commandes la première fois. Ceci indique que sqlcmd a mis fin à sa session. Vous pouvez maintenant fermer la fenêtre d'invite de commandes en tapant une autre commande EXIT .

Exécution de 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. Les fichiers de script sont des fichiers texte qui contiennent une combinaison d’instructions Transact-SQL, sqlcmd de commandes 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 construire et déboguer de manière interactive un ensemble d’instructions Transact-SQL dans SQL Server Management Studio, puis enregistrer le contenu de la fenêtre de requête en tant que fichier de script.

  • Vous pouvez créer un fichier texte contenant des instructions Transact-SQL à l’aide d’un éditeur de texte comme le Bloc-notes.

Exemples

R. Exécution d'un script à l'aide de sqlcmd

Démarrez le Bloc-notes et tapez les instructions Transact-SQL suivantes :

USE AdventureWorks2012;

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 à l'invite de commandes pour exécuter le script et diriger la sortie dans MyOutput.txt dans MyFolder:

sqlcmd -i C:\MyFolder\MyScript.sql -o C:\MyFolder\MyOutput.txt

Lorsque vous affichez le contenu de MyOutput.txt dans le Bloc-notes, vous découvrez son contenu :

Changed database context to 'AdventureWorks2012'.

BusinessEntityID FirstName LastName

---------------- ----------- -----------

1 Syed Abbas

2 Catherine Abel

3 Kim Abercrombie

(3 rows affected)

B. Utilisation de 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 à l'aide de la connexion administrateur dédiée.

C:\>sqlcmd -S ServerName -A

1> SELECT blocked FROM sys.dm_exec_requests WHERE blocked <> 0;

2> GO

Voici le jeu de résultats obtenu.

spid blocked

------ -------

62 64

(1 rows affected)

Utilisez sqlcmd pour mettre fin au processus de blocage.

1> KILL 64;

2> GO

C. Utilisation de 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 AdventureWorks2012;

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

À l'invite sqlcmd , entrez :

C:\sqlcmd

1> :Setvar FirstName Gustavo

1> :Setvar LastName Achong

1> EXEC dbo.ContactEmailAddress $(Gustavo),$(Achong)

2> GO

EmailAddress

-----------------------------

gustavo0@adventure-works.com

D. Utilisation de 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:\BackupTemplate.sql à l'aide du code suivant.

USE master;

BACKUP DATABASE [$(db)] TO DISK='$(bakfile)';

À l'invite sqlcmd , entrez :

C:\ >sqlcmd

1> :connect <server>

Sqlcmd: Successfully connected to server <server>.

1> :setvar db msdb

1> :setvar bakfile c:\msdb.bak

1> :r c:\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. Utilisation de 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. Retour d'une sortie XML

L'exemple suivant montre comment la sortie XML est retournée, sans mise en forme, dans un flux continu.

C:\>sqlcmd -d AdventureWorks2012

1> :XML ON

1> SELECT TOP 3 FirstName + ' ' + LastName + ', '

2> FROM Person.Person

3> GO

Syed Abbas, Catherine Abel, Kim Abercrombie,

F. Utilisation de sqlcmd dans un fichier de script Windows

Une sqlcmdcommande telle que sqlcmd -i C:\InputFile.txt -o C:\OutputFile.txt, peut être exécutée dans un fichier .bat avec 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 :

  • C:\badscript.sql

    SELECT batch_1_this_is_an_error  
    GO  
    SELECT 'batch #2'  
    GO  
    
  • C:\goodscript.sql

    SELECT 'batch #1'  
    GO  
    SELECT 'batch #2'  
    GO  
    
  • C:\returnvalue.sql

    :exit(select 100)  
    @echo off  
    C:\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  
    
  • C:\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:\windowsscript.bat:

C:\>windowsscript.bat

Running badscript.sql

== An error occurred

Running goodscript.sql

Running returnvalue.sql

SQLCMD returned 100 to the command shell

G. Utilisation de sqlcmd pour définir le chiffrement sur Azure SQL Database

Un sqlcmdpeut être exécuté sur une connexion pour SQL Database données sur afin de 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.net ENCRYPT = 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.net TRUSTSERVERCERTIFICATE = 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 provoquent 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 Native Client SQL Server 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 Native Client SQL Server 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 -T  
  

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.

Voir aussi

Utilitaire sqlcmd
Utiliser sqlcmd avec des variables de script
Modifier des scripts SQLCMD à l’aide de l’Éditeur de requête
Gérer les étapes de travail
Créer une étape de travail CmdExec