【问题标题】:Stored procedure in TalendTalend 中的存储过程
【发布时间】:2014-06-05 12:36:55
【问题描述】:

我设计了一个 Talend 作业来将数据从 excel 文件复制到 SQL Server 表。 在复制数据之前,我使用数据库中定义的一个存储过程来清除数据库中已经存在的条目,以免重复。

但由于我要对可能没有此存储过程的数据库进行数据转换,因此我的数据转换将无法正常工作。

所以我想在我的 Talend 作业本身中定义存储过程。

我应该使用哪个组件以及我该怎么做?

【问题讨论】:

    标签: sql-server stored-procedures talend


    【解决方案1】:

    使用tSQLRow组件执行SQL语句,可以在tSQLRow组件中执行PLSQL语句。

    【讨论】:

    • 我对 tMSSqlSP 和 tMSSqlRow 感到困惑。
    • 顾名思义,一个用于执行tMSSqlSP 存储过程,另一个tMSSqlRow用于执行删除、更新、选择等SQL语句。
    • 我正在使用查询..“从 table1、table2、table3 中删除”但它不起作用。所有数据都被复制,最后它给出了一个错误,上面写着“','附近的语法不正确”但是,如果我使用查询“从 table1 中删除”它可以工作。我必须使用多个 tMSSQLRow 吗?每张桌子。
    • 我在这里找到的。 help.talend.com/display/KB/… 谢谢。
    【解决方案2】:

    Talend txxxSqlOutput 组件为您提供更改默认“对表的操作”的选项,其中一个选项是清除表或截断表(请参阅here 了解差异)。或者,如果您希望每次都初始化数据库以加载数据,并且不需要预先准备好的表和自定义索引,那么您可以使用drop table if exists and create 选项每次都重新开始。该选项的唯一问题是它只会创建 PK 索引、执行数据类型、设置长度和在字段上设置可空/不可空。因此,如果您需要添加大量索引,那么您将丢失这些索引,但您可以稍后再添加索引,这也有利于加快您的初始插入。

    与往常一样,您可以使用数据库行组件对数据库执行自定义 SQL,这包括 DELETEs、TRUNCATEs 和 ALTERs,但我倾向于使用 Talend 提供的图形组件尽可能提供,因为它可以防止逻辑过滤到单独的级别。在初始 DB 输出组件中使用 CREATE 语句后,您也可以使用 ALTER 语句来设置索引/复杂键。

    附带说明一下,我不会将这种 SQL 语句放入存储过程中,除非您要求没有应用程序在数据库上执行临时 SQL 语句并且所有事情都必须通过调用存储过程来完成。这通常仅在面向公众的应用程序中才会出现,出于安全原因会这样做,并且允许在外部触发 DELETE 语句听起来是个坏主意。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-30
      • 2013-11-23
      • 2010-09-15
      • 2017-01-01
      • 2012-06-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多