«Запрошенное преобразование не поддерживается» с использованием связанного сервера и ODBC - PullRequest
1 голос
/ 19 марта 2012

Наше веб-приложение сохраняет данные в кодировке UTF-8 в полях VARCHAR.Недавно мы предоставили нашим клиентам доступ к этим данным через ODBC с помощью драйвера DataDirect OpenAccess ODBC.Это достигается использованием DataDirect OpenAccess SDK, написанием класса C # .Net для взаимодействия со службой.Мы разрешаем только клиентам выполнять запросы SELECT.В настоящее время мы также ограничиваем результаты до 100 тыс. Строк.

Это решение действительно прекрасно работает, за исключением того, что запросы полей с некоторыми из этих закодированных данных, по понятным причинам, показались пользователям бессмысленными.В следующем выпуске нашего сервиса я хотел бы предложить пользователям возможность делать запросы, используя некодированные строки, и впоследствии просматривать не кодированные результаты.

Я решил эту проблему с помощью кодировки UTF-8 входящего запроса, а затем возвратанезашифрованные результаты с пометкой полей VARCHAR были WVARCHAR.Это на самом деле работает очень хорошо.Однако это означает, что каждый столбец VARCHAR возвращается как WVARCHAR, несмотря на наличие (или отсутствие) символов Unicode.

Многие из наших клиентов в настоящее время приняли метод создания связанного сервера в SSMSна их собственном экземпляре SQL Server, и это мой предпочтительный способ подключения.Поскольку наш сервис ограничивает результаты до 100 тыс. Строк, я призываю всех использовать OPENQUERY для выполнения запросов.Кажется, однако, что что-то мне не хватает в конфигурации моего связанного сервера в SSMS.Когда строковые функции (например, LEFT, RIGHT, SUBSTRING) выполняются для этих столбцов WVARCHAR, SSMS возвращает следующую ошибку:

Поставщик OLE DB "MSDASQL" для связанного сервера "LOCAL" возвращает сообщение "Запрошено"преобразование не поддерживается.Сообщение 7341, уровень 16, состояние 2, строка 1 Не удается получить текущее значение строки столбца «[MSDASQL] .ColName» от поставщика OLE DB «MSDASQL» для связанного сервера «LOCAL».

Thisбудет возвращен для запроса, такого как этот:

SELECT *
FROM OPENQUERY([LOCAL], '
  SELECT LEFT(FirstName, 2) AS ColName
  FROM dbo.User 
')

Если бы я удалил функцию LEFT из этого запроса, столбец FirstName был бы возвращен, правильно декодирован, без ошибки.

Эта проблема не затрагивает запросы, например, в MS Excel.И на первый взгляд кажется, что на строки должным образом влияют их соответствующие функции, когда я отлаживаю свой путь через класс .Net, который взаимодействует с продуктом DataDirect.Я попытался изменить все параметры сервера в свойствах связанного сервера, но мне не повезло найти правильную комбинацию.Я просто ищу подходящее дерево, чтобы лаять здесь.Это мое отношение к результатам, меняя их на WVARCHAR?Или это какой-то атрибут моего связанного с SSMS сервера, который мне нужно изменить, и которого мне не хватает?

1 Ответ

1 голос
/ 08 января 2013

В свойствах связанного сервера, когда для COLLATION COMPATIBLE установлено значение TRUE, проблема решена.

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