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

SQL Server Express 2008 R2 Linked Server to IBM i (iSeries): queries return text as 0xD4F3F1F7F9F1F0

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

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

TITLE: Microsoft SQL Server Management Studio

The linked server has been created but failed a connection test. Do you want to keep the linked server?

ADDITIONAL INFORMATION:

An exception occurred while executing a Transact-SQL statement or batch. (Microsoft.SqlServer.ConnectionInfo)

Cannot initialize the data source object of OLE DB provider "IBMDA400" for linked server "S10A7F0P". (Microsoft SQL Server, Error: 7303)

有人遇到过这样的事情吗?我对整个 SQL 服务器的事情相当陌生。

提前致谢!

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

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

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

另一种方法是使用 OLEDB 驱动程序的 "Force Translate" 属性 强制数据库转换文本列。