2009-10-02 4 views
5

Lorsque j'essaie d'utiliser la cmdlet Invoke-Sqlcmd de SQL Server 2008 pour exécuter une requête contenant des variables de script, ex. $(MyVar), je reçois l'exception suivante:L'applet de commande Invoke-Sqlcmd génère une exception lors de l'utilisation du paramètre -Variable

Invoke-Sqlcmd: Référence d'objet non définie sur une instance d'un objet.

Voici le code que j'essaie de lancer (qui est un copier/coller de the Books Online example avec seulement les paramètres de connexion ajoutés).

$MyArray = "MyVar1 = 'String1'", "MyVar2 = 'String2'" 
Invoke-Sqlcmd -Query "SELECT `$(MyVar1) AS Var1, `$(MyVar2) AS Var2;" -Variable $MyArray -ServerInstance "localhost" -Database "master" -UserName "who" -Password "me" 

Si je remplace $(MyVar1) et $(MyVar2) dans le -Query avec 'x' et 'y' il fonctionne parfaitement.

$MyArray = "MyVar1 = 'String1'", "MyVar2 = 'String2'" 
Invoke-Sqlcmd -Query "SELECT 'x' AS Var1, 'y' AS Var2;" -Variable $MyArray -ServerInstance "localhost" -Database "master" -UserName "who" -Password "me" 

Quelqu'un peut-il me dire pourquoi cela ne fonctionne pas?

Répondre

4

Ok. J'ai posté cette même question sur les forums SQL Server et, apparemment, il s'agit d'un bogue dans les cmdlets PowerShell de SQL Server 2008 ... follow the thread here.

-1

Essayez cette seule: PS> $ MonTableau = "MyVar1 = 'String1'", "MyVar2 = 'String2'"

maintenant: PS> $ MonTableau et PS> MyVar1

Maintenant: PS> $ MyArray | get-member

PowerShell pense que vous avez affecté 2 objets chaîne à $ MyArray, rien de plus. Cette approche ne permet pas de définir les variables $ MyVar1 et $ MyVar2 à PowerShell.

Désolé, je ne peux tirer mon SQL2008 VM en ce moment de commenter les autres parties ...

+0

Selon l'exemple en ligne Livres, attribuer les 2 chaînes du tableau est exactement ce qui doit se produire puisque la cmdlet attend un tableau des affectations variables. – joshuapoehls

Questions connexes