从SQL Server 2008链接服务器调用DB2存储过程

3

我有一个从SQL Server 2008到DB2的链接服务器。该链接服务器使用IBM驱动程序而不是Microsoft的。

所以这可以在SQL Server上工作:

exec ('call RERTEBT.GET_DEFINITION (69,'''','''')') AT MyLinkedDB2Server

这也适用于使用openQuery...的情况,该方法从另一张表返回不同的数据。
select
RPMG_ETY_CD,
     ROW_CU_DATA_IN,
ROW_EF_DT,
ROW_XPR_DT,
RPMG_ETY_NM
from 
OPENQUERY 
         (MyLinkedDB2Server,
                'select 
                      RPMG_ETY_CD,
                      ROW_CU_DATA_IN,
                      ROW_EF_DT,
                      ROW_XPR_DT,
                      RPMG_ETY_NM
                 from RERTEBT.V1RERRMM')

然而,我无法通过DB2 Sproc获得select返回的数据。
这个失败了 -
SELECT FLT_DFN_ID, FLT_SRC_DFN_NO, FLT_VRSN_NO, FLT_STAT_CD, FLT_TY_CD, FLT_NAME 
      FROM OPENQUERY (MyLinkedDB2Server, 
                         'call RERTEBT.GET_DEFINITION 69,'''','''')')

有人知道如何从SQL Server Linked server调用DB2存储过程并返回数据吗?或者是否可以实现这一点。我在某处读到DB2无法做到这一点,但没有看到任何真正的文档。谢谢D。

有人有任何想法吗?谢谢。 - Doiremik
2个回答

5
更多对Josef回答的解释: 您需要右键单击链接服务器的“属性”,然后进入“服务器选项”。 右侧窗格中“RPC”和“RPC Out”选项需要设置为TRUE
-- 编辑 -- 我还不能评论答案(没有50点声望)

3

您应该能够做到以下几点:

EXEC ('{CALL RERTEBT.GET_DEFINITION (69,'''','''')}') AT MyLinkedDB2Server;

甚至可以通过传递变量使代码更加简洁。
EXEC ('{CALL RERTEBT.GET_DEFINITION (?,?,?)}', 69, '', '') AT MyLinkedDB2Server;

在@gonatee描述的更改服务器设置后,这个问题得到了解决。谢谢。 - Tod Meinke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接