Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 从SSIS执行sql任务执行as400命令时出现的问题_Sql Server_Ssis_Etl_Ibm Midrange - Fatal编程技术网

Sql server 从SSIS执行sql任务执行as400命令时出现的问题

Sql server 从SSIS执行sql任务执行as400命令时出现的问题,sql-server,ssis,etl,ibm-midrange,Sql Server,Ssis,Etl,Ibm Midrange,我正在开发一个ssis包,将文本文件中的数据处理到as400系统中。在其中一个步骤中,我必须在iseries中创建一个现有文件对象的副本,并从ExecuteSQL任务执行以下命令 {CALL QSYS.QCMDEXC('CRTDUPOBJ OBJ(CKFMTWRK) FROMLIB(MYWRKLIB) OBJTYPE(*FILE) TOLIB(MYWRKLIB) NEWOBJ(CKFMTWRKPN) DATA(*NO)',0000000101.00000)} 当我从IBM个人通信终端运行该命令

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

{CALL QSYS.QCMDEXC('CRTDUPOBJ OBJ(CKFMTWRK) FROMLIB(MYWRKLIB) OBJTYPE(*FILE) TOLIB(MYWRKLIB) NEWOBJ(CKFMTWRKPN) DATA(*NO)',0000000101.00000)}
当我从IBM个人通信终端运行该命令时,该命令工作正常,但当我从SSIS包运行该命令时,抛出以下错误

[Execute SQL Task]错误:执行查询“CALL QSYS.qcmdex('CRTDUPOBJ OBJ(CKFMTWRK)FROMLIB…”失败,错误如下:“未找到具有指定参数的例程*N in*N。SQLSTATE:42884,SQLCODE:-440”。可能的失败原因:查询存在问题,“ResultSet”属性设置不正确、参数设置不正确或连接建立不正确

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

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

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

如果您对此有任何建议/帮助,我们将不胜感激

谢谢。
Dvr

您试图从SQL环境(SSIS)执行AS/400操作系统级命令,这是不正确的。QCMDEXEC是AS/400命令行解释器,而CRTDUPOBJ是从源创建相同的对象,并具有复制其数据的选项

个人通信终端很好,因为你们认为你们在使用SQL服务,但实际上并没有。它是AS400命令

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

CRTDUPOBJ OBJ(CKFMTWRK)FROMLIB(MYWRKLIB)OBJTYPE(*文件)TOLIB(MYWRKLIB)NEWOBJ(CKFMTWRKPN)数据(*否)


最后一个关键字数据(*否)意味着只创建对象,而不创建数据,因此完成后您将得到一个空文件。

在提出第一个问题之前,是否最好阅读以了解更多关于提出问题的信息和其他有用信息,以及获得第一个
通知的
徽章我的文档显示命令长度参数不带小数点int和padding。可能您的开发工具正在尝试将值作为浮点值而不是十进制值传递。我尝试在没有填充的情况下传递,但仍然不起作用:(我不知道该怎么做!!不知道您使用的是什么OS版本,但“as400”太旧了,它们不会运行任何最新版本。如果您有更新的系统,请尝试QSYS2.QCMDEXC而不是QSYS.QCMDEXC,并去掉长度参数。只传入命令字符串。如果不起作用,请让我们知道操作系统版本/发行版。正如在博客中建议的那样,我创建了一个外部过程,如下所示,并从我的SSIS包中调用了该过程。Thdint也可以工作。创建过程QSYS.QCMDEXC(在CMDSTR VARCHAR(1024)中,在CMDLENGTH DECIMAL(15,5)中)外部名称QSYS.QCMDEXC GENERAL,然后我认为命名可能有歧义,并尝试使用以下过程,但仍然失败。创建过程CLOCTEST.CMDEXC(在CMDSTR VARCHAR(1024)中,在CMDLENGTH DECIMAL(15,5)中)EXTERNAL NAME CLOCTEST.CMDEXC LANGUAGE C GENERAL这里也有问题吗?这个方法有效吗?还是我应该放弃它?@dvr再说一遍,你不告诉你的操作系统版本,所以不可能有一个好的答案。但是,你声明的是VARCHAR parm,QCMDEXC只接受CHAR parm。也就是说,签名不匹配。但是如果你尝试m QSYS2而不是QSYS,您可能已经有了一个接受VARCHAR且不需要长度parm的proc…这取决于OS版本。@dvr…但即使在早期版本中,只要您提供CHAR命令parm和长度,QSYS.QCMDEXC也可以工作。如果您只能提供带引号的字符串,则必须将其转换为CHAR。