2009-10-02 18 views
5

Cuando intento utilizar el cmdlet Invoke-Sqlcmd de SQL Server 2008 para ejecutar una consulta que contiene variables de script, p. Ej. $(MyVar), recibo la siguiente excepción:El cmdlet Invoke-Sqlcmd arroja una excepción al usar el parámetro -Variable

Invoke-Sqlcmd: Referencia de objeto no establecida en una instancia de un objeto.

Aquí está el código que estoy tratando de ejecutar (que es copiar/pegar desde the Books Online example con solo los parámetros de conexión agregados).

$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 sustituyo $(MyVar1) y $(MyVar2) en el -Query con 'x' y 'y' entonces funciona perfectamente.

$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" 

¿Alguien me puede decir por qué esto no está funcionando?

Respuesta

4

Ok. Publiqué esta misma pregunta en los foros de SQL Server y, al parecer, esto es un error en los cmdlets de PowerShell de SQL Server 2008 ... follow the thread here.

-1

Prueba esto solo: PS> $ MiMatriz = "MyVar1 = 'cadena1'", "MiVar2 = 'Cadena2'"

Ahora: PS> $ MiMatriz y PS> MyVar1

Ahora: PS> $ MyArray | get-member

PowerShell cree que ha asignado 2 objetos de cadena a $ MyArray, nada más. Este enfoque no da como resultado la definición de las variables $ MyVar1 y $ MyVar2 en PowerShell.

Lo siento, no puedo encender mi SQL2008 VM ahora a comentar sobre las otras partes ...

+0

Según el ejemplo de los libros en pantalla, la asignación de las 2 cadenas de la matriz es exactamente lo que debe suceder ya que el cmdlet se espera una serie de asignaciones de variables. – joshuapoehls

Cuestiones relacionadas