Командлет Invoke-Sqlcmd выдает исключение при использовании параметра -Variable - PullRequest
5 голосов
/ 02 октября 2009

Когда я пытаюсь использовать командлет Invoke-Sqlcmd из SQL Server 2008 для выполнения запроса, содержащего переменные сценария, например $(MyVar), я получаю следующее исключение:

Invoke-Sqlcmd: ссылка на объект не установлена ​​для экземпляра объекта.

Вот код, который я пытаюсь запустить (это копирование / вставка из примера Books Online только с добавленными параметрами соединения).

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

Если я заменим $(MyVar1) и $(MyVar2) в -Query на 'x' и 'y', тогда он будет работать отлично.

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

Может кто-нибудь сказать мне, почему это не работает?

Ответы [ 3 ]

5 голосов
/ 31 октября 2010

Действительно, это ошибка в SQL Server - отслеживается и исправляется здесь https://connect.microsoft.com/sqlserver/feedback/details/358291/invoke-sqlcmd-powershell-cmdlet-fails-when-array-passed-via-variable

Тем не менее, есть опубликованный обходной путь. Удалите пробелы вокруг назначения. Так что вместо

$MyArray = "MyVar1 = 'String1'", "MyVar2 = 'String2'"

использовать

$MyArray = "MyVar1='String1'", "MyVar2='String2'"
4 голосов
/ 13 октября 2009

Хорошо. Я разместил этот же вопрос на форумах по SQL Server, и, по-видимому, это ошибка в командлетах PowerShell в SQL Server 2008 ... см. Здесь .

0 голосов
/ 03 октября 2009

Попробуйте в одиночку: PS> $ MyArray = "MyVar1 = 'String1'", "MyVar2 = 'String2'"

Сейчас: PS> $ MyArray а также PS> MyVar1

Сейчас: PS> $ MyArray | получить членов

PowerShell считает, что вы присвоили 2 строковых объекта $ MyArray, не более того. Этот подход не приводит к определению переменных $ MyVar1 и $ MyVar2 для PowerShell.

Извините, я не могу запустить мою виртуальную машину SQL2008, чтобы прокомментировать другие части ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...