Sql Server: связанный сервер с базой данных Informix - PullRequest
1 голос
/ 30 мая 2019

У меня есть связанный сервер, указывающий на базу данных Informix.Используя этот связанный сервер, я пишу SQL-запрос для извлечения данных и загрузки их в SQL-таблицу.

Но существует несколько таблиц, которые выдают ошибку переполнения типа данных.Для таблицы я определил столбец и запись, которая вызывает проблему.Не удалось преобразовать значение данных по причине, отличной от несоответствия или переполнения знака.

Если я исключаю этот столбец или конкретную запись, моя инструкция SELECT возвращает результат без каких-либо проблем.Я проанализировал этот столбец, который является типом данных Char;Я получаю сообщение об ошибке, когда в поле есть определенные символы (€ или š).

Ниже приведен сценарий, который я использовал для создания Связанного сервера:

DECLARE @provider NVARCHAR(4000);

SET @provider = N'Driver={IBM INFORMIX ODBC DRIVER};'

`+` N'SERVICE=1526 ;' --Informix service name

`+` N'PROTOCOL=onsoctcp ;' --Informix protocol 

--+ N'DB_LOCALE=en_US.819; CLIENT_LOCALE=en_US.819;';

EXEC master.dbo.sp_addlinkedserver 

@server =N'LS_INFORMIX', --Linked Server system name 

@srvproduct=N'Ifxoledbc', 

@provider=N'Ifxoledbc', 

@datasrc=N'xxx@yyyyyy', --Informix Database 

@provstr= @provider;

Я пытался удалить commentLine в 5-й строке, но я получаю ошибку 7303 (не могу инициализировать Ifxoledbc).

Может ли кто-нибудь мне помочь?

1 Ответ

0 голосов
/ 30 мая 2019

Теоретически вы можете избежать ошибочного преобразования кодового набора, используя ODBC вместо OLEDB для связанного сервера и задав для CLIENT_LOCALE значение en_US.819.

Создайте связанный сервер с помощью драйвера ODBC с:

EXEC sp_dropserver 'ids1210_odbc', @droplogins='droplogins';;

EXEC master.dbo.sp_addlinkedserver @server = N'ids1210_odbc',
 @srvproduct=N'MSDASQL',
 @provider=N'MSDASQL',
 @datasrc=N'ids1210',
 @provstr=N'Provider=MSDASQL'

exec sp_addlinkedsrvlogin 'ids1210_odbc',false,'sa','informix','mypass'

select * from OPENQUERY(ids1210_odbc,'select * from systables')

select * from ids1210_odbc.stores7.informix.systables

«ids1210» - это имя системного DSN ODBC.Используйте Windows ODBC Data Source Administrator для его создания.И CLIENT_LOCALE, и DB_LOCALE в DSN среды должны быть установлены на «en_US.819».

Это должно работать и позволять вам извлекать «причудливые» символы из базы данных, но в какой-то момент вы должны исправитьпроблема и измените локаль базы данных в соответствии с данными, которые у вас есть внутри.

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