2012-03-19 5 views
1

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

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

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

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

OLE DB provider "MSDASQL" for linked server "LOCAL" returned message "Requested conversion is not supported.". Msg 7341, Level 16, State 2, Line 1 Cannot get the current row value of column "[MSDASQL].ColName" from OLE DB provider "MSDASQL" for linked server "LOCAL".

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

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

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

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

ответ

1

В свойствах связанных серверов, при СОБРАТИВАНИИ СОБЫТИЙ, установленном в ИСТИНА, проблема устранена.

Смежные вопросы