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

时间:2013-09-04 15:34:41

标签: sql-server sql-server-2008 db2

我有一个从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

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

你应该能够做到这一点:

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

甚至更干净的传递变量

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