【问题标题】:Getting this error while calling a DB2 stored procedure through a linked server using Microsoft SQL Server使用 Microsoft SQL Server 通过链接服务器调用 DB2 存储过程时出现此错误
【发布时间】:2023-01-30 20:57:49
【问题描述】:

我正在尝试使用 Microsoft SQL Server 通过链接服务器调用 DB2 存储过程,但出现错误。

我使用名为 LINKITM 的链接服务器从模式 ASIC1634AC 调用了一个名为 CARDREG 的 DB2 存储过程。我使用了以下代码。

SELECT * FROM OPENQUERY(LINKITM, '
call ASIC1634AC.CARDREG( ''5159070047392866''
, ''0423'', ''221229'', ''170000'', ''RG'', ''6211''
, ''THL'',   
  ''221229123456''
  , ''123456'', ''60137300000''
  , ''00000010'', ''000000000000010''
  ,     ''FAYSAL BANK LTD THALES TOKENIZATION   PK''
  , ''0200'', '' '', '' '', '' '', '' '', ''00'')');

当我直接从 IBM Access Client 调用该过程时,我得到了正确的响应,但是当我通过链接服务器调用时,我收到以下错误:

链接服务器“LINKITM”的 OLE DB 提供程序“IBMDASQL”返回消息“SQL0469:IN、OUT 或 INOUT 对于 ASIC1634AC 中过程 CARDREG 中的参数 19 无效。 原因 。 . . . . : 定义过程时为参数 19 指定的 IN、INOUT 或 OUT 属性无效。参数名称是 POUTPUT。发生以下错误之一: -- 无法为 OUT 参数指定默认值。 -- 该属性与 CALL 语句中的参数不一致。如果参数声明为 INOUT 或 OUT,则 CALL 语句中的参数必须指定为主变量或全局变量。 -- 属性被指定为 INOUT 或 OUT 并且 REXX 被指定为语言。如果指定了 REXX,则该属性必须为 IN。恢复 。 . . :要么更改 DECLARE PROCEDURE、CREATE PROCEDURE 或 ALTER PROCEDURE 语句中参数的属性,要么更改参数。再次尝试该请求。”。

【问题讨论】:

    标签: sql-server db2 linked-server db2-400


    【解决方案1】:

    存储过程中参数的定义与通过链接服务器调用时传递给存储过程的方式之间可能存在不匹配。

    要解决此问题,您需要确保通过链接服务器传递给存储过程的参数与存储过程中定义参数的方式一致。如果参数在存储过程中声明为 INOUT 或 OUT,则它必须作为主变量或全局变量传递,而不是作为代码示例中的常量值传递。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-07
      • 1970-01-01
      相关资源
      最近更新 更多