我有一个指向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)。
有人可以帮我吗?
答案 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”。
它应该可以工作,并允许您从数据库中检索“花哨的”字符,但是在某些时候,您应该解决问题并更改数据库的语言环境以适合内部数据。