在Talend中获取TMSSqlRow的输出

时间:2018-01-05 09:21:39

标签: output talend

我想用TMSSqlRow获取受影响/删除/更新的行数。

这是工作的方式:

enter image description here

文件使用包含很多像DELETE一样的SQL语句... INSERT ... UPDATE ... 每行由";"

分开

但是现在,我希望获得每个语句的结果(x行更新,结果显示在管理工作室中)。

当我进入"高级设置" tmssqlrow的选项卡,我选择"传播QUERY的记录集"并选择我之前创建的列(对象类型)。

执行时,我有这个错误:" executeQuery方法必须返回一个结果集"。

那么,我如何获取每个语句的结果并将其(通过示例)插入数据库/文件中?

提前谢谢。 问候, 泽维尔

2 个答案:

答案 0 :(得分:3)

选项“Propagate QUERY的记录集”必须与tParseRecordSet结合使用,才能从返回的记录集中提取信息。但是,这还不够:您必须显式编写查询以返回更新/删除的记录数。

这就是我的所作所为:

enter image description here

我的tJDBCRow(与tMSSqlRow相同)查询看起来像这样(注意我在更新查询之前必须添加'set nocount on',然后'select @@ rowcount')

enter image description here

tParseRecordSet从列结果集中检索行数(nbLines是我的rowcount的别名)

https://gerardnico.com/wiki/lang/r/cross_validation

答案 1 :(得分:0)

如果需要受影响的行数,更好的选择是使用tMSSqlOutput组件,该组件可以更新,插入或删除行。执行后,该组件将提供全局变量以显示该操作影响了多少行。

((Integer)globalMap.get("tMSSqlOutput_1_NB_LINE")) 
((Integer)globalMap.get("tMSSqlOutput_1_NB_LINE_UPDATED"))   
((Integer)globalMap.get("tMSSqlOutput_1_NB_LINE_INSERTED"))    
((Integer)globalMap.get("tMSSqlOutput_1_NB_LINE_DELETED"))