SQL Server:将服务器链接到Informix数据库

时间:2019-05-30 12:39:25

标签: sql-server informix linked-server

我有一个指向Informix DB的链接服务器。使用此链接服务器,我正在编写一个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;

我试图删除第5行上的commentLine,但收到错误7303(无法初始化Ifxoledbc)。

有人可以帮我吗?

1 个答案:

答案 0 :(得分:0)

从理论上讲,您可以避免对链接服务器使用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”是ODBC系统DSN的名称。使用Windows ODBC数据源管理器创建它。 环境DSN中的CLIENT_LOCALE和DB_LOCALE都应设置为“ en_US.819”。

它应该可以工作,并允许您从数据库中检索“花哨的”字符,但是在某些时候,您应该解决问题并更改数据库的语言环境以适合内部数据。