【问题标题】:Delete statement fails when called from SSIS从 SSIS 调用时删除语句失败
【发布时间】:2019-07-26 18:42:35
【问题描述】:

我正在尝试从 SSIS 编排 Snowflake。

我正在使用 ODBC 连接和执行 SQL 任务。 truncate table 语句工作正常,任务成功完成。将此更改为删除,任务失败并出现以下错误:

失败并出现以下错误:“错误 HRESULT E_FAIL 已从对 COM 组件的调用中返回。”。可能的失败原因:查询有问题,“ResultSet”属性设置不正确,参数设置不正确,或者连接没有正确建立。

从雪花查询历史可以看出,查询成功完成:

我怀疑当 SSIS 设置为“无”时,“结果”看起来就像一个结果集。我已将其更改为单行和“完整结果集”到一个对象中,但无论设置如何,仍然会出错。

为了让 SSIS 成功执行针对 Snowflake 的语句,我需要进行哪些更改?

编辑:

添加我的删除语句:

delete from SUMMARY.Data_minutes
where date >= dateadd(day,-5  ,'2019-01-20' )
and date <= '2019-01-20' 

【问题讨论】:

  • 删除是执行 SQL 任务中的原始查询是吗?你有映射的参数吗?删除是否适用于设置为“无”的结果集属性?
  • 您使用了什么 ODBC 驱动程序?我怀疑它的实施可能是罪魁祸首,而它却期望某些东西不会出现。我建议你使用 JavaScript UDL 而不是 SQL DELETE
  • @NeilP 你使用的删除命令是什么??
  • @Arthur 官方 Snowflake 64 位 odbc 驱动程序。
  • @JacobH 删除是执行 sql 任务中的原始查询。没有映射参数,当结果集设置为 none 时仍然失败。

标签: sql ssis odbc snowflake-cloud-data-platform ssis-2016


【解决方案1】:

试图找出问题

在搜索此问题时,我在Devart support page 发现了一些有趣的东西,其中报告了类似问题:

根据 Microsoft 文档,如果查询没有影响任何记录,将返回结果 SQL_NO_DATA(对于 ODBC 3.x 规范)。我们的驱动程序和 SSIS 使用 ODBC 3.x 规范,但是,在所描述的情况下,SSIS 将行为实现为 ODBC 2.x。这就是为什么在收到 SQL_NO_DATA 的结果时,会返回错误“Error HRESULT E_FAIL has been returned from a call to a COM component”。

基于Microsoft documentation

当 ODBC 3.x 应用程序在 ODBC 2.x 驱动程序中调用 SQLExecDirect、SQLExecute 或 SQLParamData 以执行不影响数据源中任何行的搜索更新或删除语句时,驱动程序应返回 SQL_SUCCESS,而不是SQL_NO_DATA。当使用 ODBC 3.x 驱动程序的 ODBC 2.x 或 ODBC 3.x 应用程序以相同的结果调用 SQLExecDirect、SQLExecute 或 SQLParamData 时,ODBC 3.x 驱动程序应返回 SQL_NO_DATA。

这意味着当没有行匹配以下条件时,它将抛出异常(类似情况:ODBC版本冲突)

where date >= dateadd(day,-5  ,'2019-01-20' )
and date <= '2019-01-20' 

尝试一下

我现在无法测试此解决方法,但您可以尝试两种方法:

  1. 在删除命令后添加一个虚拟选择行

    delete from SUMMARY.Data_minutes
    where date >= dateadd(day,-5  ,'2019-01-20' )
    and date <= '2019-01-20' 
    
    select 1
    
  2. 创建一个存储过程并将日期作为参数传递,并从执行SQL任务中执行它(也尝试在存储过程的末尾添加一个虚拟选择命令)

     Exec sp_Delete ?
    

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,为了解决我将我的 ODBC 连接更改为 ADO.net 连接。

    我希望这对你有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-19
      • 2015-10-13
      • 1970-01-01
      • 2022-01-03
      • 2019-05-06
      • 1970-01-01
      • 2020-07-28
      相关资源
      最近更新 更多