Поддержка Unicode для Invoke -Sqlcmd в PowerShell

. Модуль PowerShell sqlps обеспечивает базовую поддержку доступа к SQL Server из PowerShell, а его командлет Invoke -Sqlcmd является его основной рабочей лошадкой для выполнения литеральных запросов или файлов сценариев SQL (, аналогичных к не -утилите PowerShell sqlcmd ). Недавно я провел несколько экспериментов, чтобы подтвердить, что Invoke -Sqlcmd обрабатывает Unicode, и получил несколько неожиданных результатов.

Я начал с этого простого файла сценария (с именем unicode.sql ):

CREATE TABLE #customers

( [IdCust] int,
  [FirstName] nvarchar(25),
  [SurName] nvarchar(25)
);
INSERT INTO #customers VALUES (4, N'Hans', N'Grüßner')
SELECT * FROM #customers;
DROP TABLE #customers;

. Обратите внимание, что в фамилии есть несколько типичных символов Unicode, которые можно найти, например, в немецком имени.


Результаты

Студия управления SQL Server:Отображает правильно при выводе в сетку или в текст, например.

IdCust      FirstName                 Surname
----------- ------------------------- -------------------------
4           Hans                      Grüßner

утилита sqlcmd:Отображает правильно независимо от того, запускается ли он из оболочки DOS или PowerShell, например.

C:\> sqlcmd -S.\SQLEXPRESS -i unicode.sql

IdCust      FirstName                 Surname
----------- ------------------------- -------------------------
          4 Hans                      Grüßner

Вызов PowerShell -Sqlcmd:Неправильно отображается (независимо от того, выводится ли он в виде текста, как показано ниже, или передается в Out -Gridview):

PS> Invoke-Sqlcmd -Server.\sqlexpress -InputFile unicode.sql

IdCust FirstName           Surname
------ ---------           -------
     4 Hans                Gr??ner

Документация MSDN для Invoke -Sqlcmd упоминает Unicode лишь вскользь, сравнивая его командные -переключатели строк с переключателями строк sqlcmd, показывая, что хотя последний имеет параметр -uдля вывода Unicode (, который даже не был нужен в моем эксперименте выше ), Invoke -Sqlcmd не имеет нет эквивалентного параметра.

Я ничего не нашел по этому вопросу в результате обширного поиска в Интернете, но я все еще надеюсь, что это в некотором роде ошибка пользователя с моей стороны. Есть ли способ сохранить входные данные при их извлечении с помощью Invoke -Sqlcmd в PowerShell?

10
задан Michael Sorens 10 August 2012 в 16:24
поделиться