Invoke-Sqlcmd (applet de commande)

Invoke-Sqlcmd est une applet de commande SQL Server qui exécute des scripts contenant des instructions des langages Transact-SQL et XQuery et les commandes prises en charge par l'utilitaire sqlcmd.

Utilisation d'Invoke-Sqlcmd

L'applet de commande Invoke-Sqlcmd vous permet d'exécuter vos fichiers de script sqlcmd dans un environnement Windows PowerShell. Une grande partie de ce que vous pouvez faire avec sqlcmd peut également l'être avec Invoke-Sqlcmd.

Voici un exemple de l'appel d'Invoke-Sqlcmd pour exécuter une requête simple, semblable à la spécification de sqlcmd avec les options -Q et -S :

Invoke-Sqlcmd -Query "SELECT GETDATE() AS TimeOfQuery;" -ServerInstance "MyComputer\MyInstance"

Voici un exemple de l'appel d'Invoke-Sqlcmd, en spécifiant un fichier d'entrée et en dirigeant la sortie vers un fichier. Cette opération est semblable à la spécification de sqlcmd avec les options -i et -o :

Invoke-Sqlcmd -InputFile "C:\MyFolder\TestSQLCmd.sql" | Out-File -filePath "C:\MyFolder\TestSQLCmd.rpt"

Voici un exemple de l'utilisation d'un tableau Windows PowerShell pour passer plusieurs variables de script sqlcmd à Invoke-Sqlcmd. Les caractères « $ » qui identifient les variables de script sqlcmd dans l'instruction SELECT ont été placés dans une séquence d'échappement en utilisant le caractère d'échappement PowerShell « ` » (backtick) :

$MyArray = "MyVar1 = 'String1'", "MyVar2 = 'String2'"
Invoke-Sqlcmd -Query "SELECT `$(MyVar1) AS Var1, `$(MyVar2) AS Var2;" -Variable $MyArray

Voici un exemple de l'utilisation du fournisseur SQL Server pour Windows PowerShell permettant de naviguer jusqu'à une instance du Moteur de base de données, puis de l'utilisation de l'applet de commande Get-Item de Windows PowerShell pour récupérer l'objet serveur SMO pour l'instance et de son passage à Invoke-Sqlcmd :

Set-Location SQLSERVER:\SQL\MyComputer\MyInstance
Invoke-Sqlcmd -Query "SELECT GETDATE() AS TimeOfQuery;" -ServerInstance (Get-Item .)

Le paramètre -Query est positionnel et il n'est pas nécessaire de le nommer. Si la première chaîne passée à Invoke-Sqlcmd est sans nom, elle est traitée comme le paramètre -Query.

Invoke-Sqlcmd "SELECT GETDATE() AS TimeOfQuery;" -ServerInstance "MyComputer\MyInstance"

Contexte de chemin d'accès dans Invoke-Sqlcmd

Si vous n'utilisez pas le paramètre -Database, le contexte de base de données pour Invoke-Sqlcmd est défini par le chemin d'accès qui est actif lors de l'appel à l'applet de commande.

Chemin d'accès

Contexte de base de données

Commence par un lecteur autre que SQLSERVER:

Base de données par défaut pour l'ID de connexion dans l'instance par défaut sur l'ordinateur local.

SQLSERVER:\SQL

Base de données par défaut pour l'ID de connexion dans l'instance par défaut sur l'ordinateur local.

SQLSERVER:\SQL\ComputerName

Base de données par défaut pour l'ID de connexion dans l'instance par défaut sur l'ordinateur spécifié.

SQLSERVER:\SQL\ComputerName\InstanceName

Base de données par défaut pour l'ID de connexion dans l'instance spécifiée sur l'ordinateur spécifié.

SQLSERVER:\SQL\ComputerName\InstanceName\Databases

Base de données par défaut pour l'ID de connexion dans l'instance spécifiée sur l'ordinateur spécifié.

SQLSERVER:\SQL\ComputerName\InstanceName\Databases\DatabaseName

Base de données spécifiée dans l'instance spécifiée sur l'ordinateur spécifié. Ceci s'applique également aux chemins d'accès plus longs, par exemple un chemin d'accès spécifiant le nœud Tables et colonnes dans une base de données.

Par exemple, supposons que votre compte Windows dans l'instance par défaut de l'ordinateur local a pour base de données par défaut master. Les commandes suivantes retournent alors master :

Set-Location SQLSERVER:\SQL
Invoke-Sqlcmd "SELECT DB_NAME() AS DatabaseName;"

Les commandes suivantes retournent AdventureWorks2012  :

Set-Location SQLSERVER:\SQL\MyComputer\DEFAULT\Databases\AdventureWorks2012\Tables\Person.Person
Invoke-Sqlcmd "SELECT DB_NAME() AS DatabaseName;"

Invoke-Sqlcmd affiche un avertissement lorsqu'il utilise le contexte de base de données du chemin d'accès. Vous pouvez utiliser le paramètre -SuppressProviderContextWarning pour désactiver le message d'avertissement. Vous pouvez utiliser le paramètre -IgnoreProviderContext pour indiquer à Invoke-Sqlcmd de toujours utiliser la base de données par défaut pour la connexion.

Comparaison d'Invoke-Sqlcmd et de l'utilitaire sqlcmd

Invoke-Sqlcmd peut être utilisé pour exécuter un grand nombre des scripts qui peuvent être exécutés à l'aide de l'utilitaire sqlcmd. Toutefois, Invoke-Sqlcmd s'exécute dans un environnement Windows PowerShell qui est différent de l'environnement d'invite de commandes dans lequel sqlcmd est exécuté. Le comportement d'Invoke-Sqlcmd a été modifié pour qu'il fonctionne dans un environnement Windows PowerShell.

Toutes les commandes sqlcmd ne sont pas implémentées dans Invoke-Sqlcmd. Les commandes qui ne sont pas implémentées incluent les éléments suivants : :!!, :connect, :error, :out, :ed, :list, :listvar, :reset, :perftrace et :serverlist.

Invoke-Sqlcmd n'initialise pas l'environnement sqlcmd ou des variables de script telles que SQLCMDDBNAME ou SQLCMDWORKSTATION.

Invoke-Sqlcmd n'affiche pas les messages, tels que la sortie des instructions PRINT, sauf si vous spécifiez le paramètre commun Windows PowerShell -Verbose. Par exemple :

Invoke-Sqlcmd -Query "PRINT N'abc';" -Verbose

Tous les paramètres sqlcmd ne sont pas nécessaires dans un environnement PowerShell. Par exemple, Windows PowerShell met en forme toute la sortie d'applets de commande. Les paramètres sqlcmd spécifiant les options de mise en forme ne sont donc pas implémentés dans Invoke-Sqlcmd. Le tableau suivant illustre la relation entre les paramètres Invoke-Sqlcmd et les options sqlcmd :

Description

Option sqlcmd

Paramètre Invoke-Sqlcmd

Serveur et le nom de l'instance.

-S

-ServerInstance

Base de données initiale à utiliser.

-d

-Database

Exécuter la requête spécifiée et quitter.

-Q

-Query

ID de connexion pour l'authentification SQL Server.

-U

-Username

Mot de passe d'authentification SQL Server.

-P

-Password

Définition de variable.

-v

-Variable

Intervalle de délai de requête.

-t

-QueryTimeout

Arrêter l'exécution en cas d'erreur

-b

-AbortOnError

Connexion administrateur dédiée.

-A

-DedicatedAdministratorConnection

Désactiver les commandes interactives, le script de démarrage et les variables d'environnement.

-X

-DisableCommands

Désactiver la substitution de variable.

-x

-DisableVariables

Niveau de gravité minimal pour le rapport.

-V

-SeverityLevel

Niveau d'erreur minimal pour le rapport.

-m

-ErrorLevel

Intervalle de délai de connexion.

-l

-ConnectionTimeout

Nom d'hôte.

-H

-HostName

Modifier le mot de passe et quitter

-Z

-NewPassword

Fichier d'entrée contenant une requête

-i

-InputFile

Longueur maximale de la sortie de type caractère

-w

-MaxCharLength

Longueur maximale de la sortie de type binaire

-w

-MaxBinaryLength

Établir la connexion à l'aide du chiffrement SSL

Aucun paramètre

-EncryptConnection

Afficher les erreurs

Aucun paramètre

-OutputSqlErrors

Sortie des messages vers stderr

-r

Aucun paramètre

Utiliser les paramètres régionaux du client

-R

Aucun paramètre

Exécuter la requête spécifiée et rester actif

-q

Aucun paramètre

Page de codes à utiliser pour les données de sortie

-f

Aucun paramètre

Modifier un mot de passe et rester actif

-z

Aucun paramètre

Taille du paquet

-a

Aucun paramètre

Séparateur de colonnes

-s

Aucun paramètre

En-têtes de sortie des contrôles

-h

Aucun paramètre

Spécifier des caractères de contrôle

-k

Aucun paramètre

Largeur d'écran de longueur fixe

-Y

Aucun paramètre

Largeur d'écran de longueur variable

-y

Aucun paramètre

Entrée d'écho

-e

Aucun paramètre

Activer les identificateurs entre guillemets

-I

Aucun paramètre

Supprimer des espaces de fin

-W

Aucun paramètre

Instances de liste

-L

Aucun paramètre

Mettre en forme la sortie en Unicode

-u

Aucun paramètre

Imprimer les statistiques

-p

Aucun paramètre

Fin de la commande

-c

Aucun paramètre

Connexion avec l'authentification Windows

-E

Aucun paramètre

Voir aussi

Référence

Utilitaire sqlcmd

Concepts

Utiliser les applets de commande du Moteur de base de données

Utiliser l'utilitaire sqlcmd