从SSIS执行as400命令时出现的问题执行sql task

时间:2017-06-16 14:04:56

标签: sql-server ssis etl ibm-midrange

我正在开发一个ssis包来处理从文本文件到as400系统的数据。在其中一个步骤中,我必须在iseries中创建现有文件对象的副本,并且我正在执行sql task中的以下命令。

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

当我从IBM Personal Communications终端运行它时,此命令正常工作,但当我从SSIS包中执行此命令时,会抛出以下错误。

  

[执行SQL任务]错误:执行查询" CALL QSYS.QCMDEXC(' CRTDUPOBJ OBJ(CKFMTWRK)FROMLIB ..."失败,出现以下错误:" Routine *找不到指定参数的N in * N.SQLSTATE:42884,SQLCODE:-440"。可能的失败原因:查询问题," ResultSet"属性设置不正确,参数设置不正确,或连接未正确建立。

有关我的环境的更多信息:

我正在使用sql server数据工具2015。 我使用Microsoft OLEDB Provider for DB2建立了与as400的连接。 我在服务器上有足够的权限(我猜,因为我能够从终端执行命令)

这是我第一次使用as400而且我在这一步中被困在这里。我尝试在网上查找,但没有什么可以帮助我解决这个问题。

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

感谢。 DVR

1 个答案:

答案 0 :(得分:0)

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

个人通信终端很好,你认为你使用的是SQL服务但实际上并非如此。这是AS400命令。

最后,你最好通过AS / 400终端来复制对象。只需使用

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

最后一个关键字DATA(* NO)表示仅创建对象而不是数据,因此在完成后您将获得一个空文件。