【问题标题】:AS400 DB2 national characters into SQL Server linked serverAS400 DB2 国家字符导入 SQL Server 链接服务器
【发布时间】:2014-07-30 08:29:38
【问题描述】:

我有一个到 IBM AS400 DB2 数据库的 SQL Server 2012 企业版链接服务器连接。 我正在使用IBMDASQL 提供程序进行连接。

我遇到了一些匈牙利字符的问题:字母 Ő 在选择过程中转换为 O

在此示例中,name_converted 列将正常,Ő 字母仍为 Ő

名称列将转换为O

SELECT * FROM openquery (g,
   SELECT 
       cast(name as char(35) ccsid 870) as name_converted,
       name,
   FROM libr.mytable')

我的问题是:我可以创建链接服务器,以便所有角色都使用 CCSID 870?

EXEC master.dbo.sp_addlinkedserver @server = N'G', @srvproduct = N'HUN00101', @provider  = N'IBMDASQL', @datasrc = N'HUN00101'

EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'G', @useself=N'False', 
            @locallogin=NULL, @rmtuser=N'query', @rmtpassword='########' 
GO

EXEC master.dbo.sp_serveroption @server = N'G', @optname = N'collation compatible', 
                                @optvalue = N'false' 
GO
EXEC master.dbo.sp_serveroption @server=N'G', @optname=N'data access', @optvalue=N'true' GO
EXEC master.dbo.sp_serveroption @server=N'G', @optname=N'dist', @optvalue=N'false' GO
EXEC master.dbo.sp_serveroption @server=N'G', @optname=N'pub', @optvalue=N'false' GO
EXEC master.dbo.sp_serveroption @server=N'G', @optname=N'rpc', @optvalue=N'false' GO
EXEC master.dbo.sp_serveroption @server=N'G', @optname=N'rpc out', @optvalue=N'false' GO
EXEC master.dbo.sp_serveroption @server=N'G', @optname=N'sub', @optvalue=N'false' GO
EXEC master.dbo.sp_serveroption @server=N'G', @optname=N'connect timeout', @optvalue=N'0' GO
EXEC master.dbo.sp_serveroption @server=N'G', @optname=N'collation name', @optvalue=null GO
EXEC master.dbo.sp_serveroption @server=N'G', @optname=N'lazy schema validation', @optvalue=N'false' GO
EXEC master.dbo.sp_serveroption @server=N'G', @optname=N'query timeout', @optvalue=N'0' GO
EXEC master.dbo.sp_serveroption @server=N'G', @optname=N'use remote collation', @optvalue=N'true' GO
EXEC master.dbo.sp_serveroption @server=N'G', @optname=N'remote proc transaction promotion', @optvalue=N'true' GO

谢谢

【问题讨论】:

标签: sql-server db2 linked-server db2-400


【解决方案1】:

看起来数据在 IBM i 系统上可能没有正确标记为 CCSID 870。您可以尝试使用“强制翻译”自定义属性并将其设置为 870 吗? 注意:这将导致所有未正确标记为 CCSID 的数据都被处理为 CCSID 870。

【讨论】:

  • 感谢您的回答。 “强制翻译”选项在 AS400 端还是在 SQL Server 上?
  • 我猜你会这样设置它:EXEC master.dbo.sp_serveroption @server=N'G', @optname=N'Force Translate', @optvalue=N'870'去
  • 不幸的是,sp_serveroption 过程没有“强制转换”选项:[链接]msdn.microsoft.com/query/…
  • 尝试将@provstr=N'Force Translate=870' 与 sp_addlinkedserver 一起使用。
  • 我将您的建议插入到命令中,但不幸的是仍然不行。 EXEC master.dbo.sp_addlinkedserver @server = N'G', @srvproduct=N'HUN00101', @provider=N'IBMDASQL', @datasrc=N'HUN00101',@provstr=N'Force Translate=870'跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-25
  • 2013-07-09
  • 2014-11-17
相关资源
最近更新 更多