Sql server SQL Server Express 2008 R2链接服务器到IBM i(iSeries):查询返回文本为0xD4F3F1F7F9F1F0

Sql server SQL Server Express 2008 R2链接服务器到IBM i(iSeries):查询返回文本为0xD4F3F1F7F9F1F0,sql-server,translation,ibm-midrange,Sql Server,Translation,Ibm Midrange,刚刚将SQL Server 2008 R2 Express链接到iSeries,无法查看我的文件。不过我可以问他们。返回的文本为0xD4F3F1F7F9F1F0,而不是类似于M123450的内容(这是一个工作订单号)。使用IDM DB2 for IBMDA400 OLE DB提供程序 我尝试使用适用于其他应用程序的连接字符串。我发现错误: 标题:Microsoft SQL Server管理工作室 已创建链接服务器,但连接测试失败。做 要保留链接的服务器吗 其他信息: 执行Transact-SQL

刚刚将SQL Server 2008 R2 Express链接到iSeries,无法查看我的文件。不过我可以问他们。返回的文本为0xD4F3F1F7F9F1F0,而不是类似于M123450的内容(这是一个工作订单号)。使用IDM DB2 for IBMDA400 OLE DB提供程序

我尝试使用适用于其他应用程序的连接字符串。我发现错误:

标题:Microsoft SQL Server管理工作室

已创建链接服务器,但连接测试失败。做 要保留链接的服务器吗

其他信息:

执行Transact-SQL语句或时发生异常 一批。(Microsoft.SqlServer.ConnectionInfo)

无法初始化OLE DB提供程序“IBMDA400”的数据源对象 对于链接服务器“S10A7F0P”。(Microsoft SQL Server,错误:7303)

有人遇到过这样的事情吗?我对SQL server这件事相当陌生

提前谢谢


M

数据返回为0xD4F3F1F7F9F1F0的原因是文本列被定义为CCSID 65535;它代表二进制数据,因此默认情况下DB不会将其从EBCDIC转换为ASCII/Unicode

您可以使用绿色屏幕DSPFFD命令或iNav GUI查看表中各个列的CCSID

解决此问题的最佳方法是确保您的文本列使用适合您的语言的CCSID进行标记(如果我们使用37)


另一种方法是使用OLEDB驱动程序的“force translate”属性强制DB翻译文本列。

谢谢,Charles……这是一些很好的信息!!我正在查找Force Translate属性,但无法在链接服务器、提供程序、IBMDA400属性中找到它。当我使用Excel外接程序时,我可以选中该框,但这里没有。我使用以下方法获得它:EXEC master.dbo.sp_addlinkedserver@server=N'TEST2',@srvpproduct=N'AS400',@provider=N'IBMDA400',@datasrc=N'10.10.10.3',@provstr=N'Force Translate=37;默认集合=amflib;Block Fetch=True;数据压缩=真;排序顺序=0;'