从SSIS执行as400命令的问题执行sql任务

问题描述:

我正在开发一个ssis软件包,用于将文本文件中的数据处理为as400系统。在其中一个步骤中,我必须在iseries中创建一个现有文件对象的副本,并且正在执行执行sql任务中的以下命令。从SSIS执行as400命令的问题执行sql任务

{CALL QSYS.QCMDEXC('CRTDUPOBJ OBJ(CKFMTWRK) FROMLIB(MYWRKLIB) OBJTYPE(*FILE) TOLIB(MYWRKLIB) NEWOBJ(CKFMTWRKPN) DATA(*NO)',0000000101.00000)} 

此命令工作正常,当我从IBM个人通信终端上运行,但会引发以下错误,当我从SSIS包做。

[Execute SQL Task] Error: Executing the query "CALL QSYS.QCMDEXC('CRTDUPOBJ OBJ(CKFMTWRK) FROMLIB..." failed with the following error: "Routine *N in *N not found with specified parameters. SQLSTATE: 42884, SQLCODE: -440". Possible failure reasons: Problems with the query, "ResultSet" property not set correctly, parameters not set correctly, or connection not established correctly.

在我的环境的更多信息:

我使用的是SQL Server数据工具2015年 我已经建立了使用Microsoft OLEDB提供商DB2到AS400的连接。 我有足够的权限在服务器上(我猜,因为我能够执行命令从终端)

这是我第一次与as400,我在这里卡在这一步。我尝试在网上查找,但没有什么可以帮助我解决这个问题。

任何建议/对此的帮助将不胜感激。

谢谢。 Dvr

+0

在询问你的第一个问题之前,阅读[Tour Page](https://www.*.com/Tour)以了解更多关于询问问题和其他有用信息的信息,也可以获得第一个“知情”徽章 – Hadi

+0

我的文档显示没有小数点和填充的命令长度参数。也许你的开发工具试图将该值作为一个浮点数而不是十进制值。 – jmarkmurphy

+0

我尝试没有填充,它仍然无法正常工作:(我不知道如何去做它!) – dvr

您试图从SQL环境(SSIS)执行不正确的AS/400操作系统级命令。 QCMDEXEC是AS/400命令行解释程序,而CRTDUPOBJ是从源创建一个相同的对象,同时也可以复制其数据。

个人通信终端很好因为你认为你使用SQL服务,但实际上不是。这是AS400命令。

最后,您最好在AS/400终端上复制对象。只需使用

CRTDUPOBJ OBJ(CKFMTWRK)FROMLIB(MYWRKLIB)OBJTYPE(* FILE)TOLIB(MYWRKLIB)NEWOBJ(CKFMTWRKPN)DATA(* NO)

最后的关键字数据(* NO)意味着只有创建对象但不是数据,所以你会在完成后得到一个空文件。

+0

正如博客中所建议的那样,我创建了一个如下所示的外部过程,并从我的SSIS包中调用了此过程。此功能也适用。 CREATE PROCEDURE QSYS.QCMDEXC(IN CMDSTR VARCHAR(1024),IN CMDLENGTH DECIMAL (15,5))EXTERNAL NAME QSYS.QCMDEXC GENERAL 然后我认为命名中可能会有歧义,并尝试使用下面的过程,但仍然失败。 ( 15,5))外部名称CLOCTEST。CMDEXC LANGUAGE C GENERAL 这里也有问题吗?这种方法可以工作吗?或者我应该放弃它? – dvr

+0

@dvr再一次,你不告诉你的操作系统版本,所以一个好的答案是不可能的。但是,您声明的是VARCHAR parm,而QCMDEXC只接受一个CHAR parm。也就是说,签名不会匹配。但是如果你从** QSYS2 **而不是QSYS中尝试,你可能已经有一个接受VARCHAR的过程,并且不需要长度parm ...取决于操作系统版本。 – user2338816

+0

@dvr ...但即使在早期版本中,QSYS.QCMDEXC也会工作,只要您提供CHAR命令parm以及长度。如果您只能提供带引号的字符串,则必须将CAST作为CHAR。 – user2338816