Nei*_*l P 5 sql odbc ssis snowflake-cloud-data-platform ssis-2016
我正在尝试从SSIS编排雪花。
我正在使用ODBC连接并执行SQL任务。截断表语句工作正常,任务成功完成。将其更改为删除,任务将失败,并显示以下错误:
失败,并出现以下错误:“从对COM组件的调用返回了错误HRESULT E_FAIL。”。可能的失败原因:查询问题,“ ResultSet”属性未正确设置,参数未正确设置或连接未正确建立。
从雪花查询历史记录中可以看到查询成功完成:
我怀疑将“结果”设置为期望“无”时,SSIS看起来像结果集。我将其更改为单行和“完整结果集”都变成了对象,但是无论设置如何,仍然会出错。
为了使SSIS成功执行针对Snowflake的语句,我需要更改什么?
编辑:
添加我的删除语句:
delete from SUMMARY.Data_minutes
where date >= dateadd(day,-5 ,'2019-01-20' )
and date <= '2019-01-20'
Run Code Online (Sandbox Code Playgroud)
在搜索此问题时,我在Devart 支持页面上发现了一些有趣的内容,其中报告了类似的问题:
根据Microsoft文档,如果查询没有影响任何记录,将返回结果SQL_NO_DATA(对于ODBC 3.x规范)。我们的驱动程序和 SSIS 使用 ODBC 3.x 规范,但是,在所描述的情况下,SSIS 将行为实现为 ODBC 2.x 。这就是为什么当接收到 SQL_NO_DATA 的结果时,会返回错误“Error HRESULT E_FAIL has returned from a call to a COM component”。
基于微软文档:
当 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'
Run Code Online (Sandbox Code Playgroud)
我现在无法测试此解决方法,但您可以尝试两种方法:
在删除命令后添加一个虚拟选择行
delete from SUMMARY.Data_minutes
where date >= dateadd(day,-5 ,'2019-01-20' )
and date <= '2019-01-20'
select 1
Run Code Online (Sandbox Code Playgroud)
创建一个存储过程并将日期作为参数传递,然后从执行 SQL 任务中执行它(也尝试在存储过程末尾添加一个虚拟选择命令)
Exec sp_Delete ?
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
422 次 |
| 最近记录: |