2

我有一个从 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 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 链接服务器调用 DB2 存储过程并返回数据,或者可以这样做。我在某处读到 DB2 无法做到这一点,但没有看到任何关于它的真实文档。

感谢:D

4

2 回答 2

4

约瑟夫回答的更多解释:您需要右键单击链接服务器的“属性”然后->“服务器选项”右侧窗格中的“ RPC ”和“ RPC Out ”选项需要为TRUE

-- 已编辑 -- 我还不能评论答案(没有 50 个代表)

于 2015-12-10T06:29:10.107 回答
2

你应该能够做到这一点:

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

甚至通过传递变量更清洁

EXEC ('{CALL RERTEBT.GET_DEFINITION (?,?,?)}', 69, '', '') AT MyLinkedDB2Server;
于 2014-03-18T18:00:35.170 回答