我正在尝试从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'
在搜索此问题时,我在这个Devart支持页面发现了一些有趣的地方,报告了类似的问题:
根据Microsoft文档,如果查询未受影响,则任何记录都将返回结果SQL_NO_DATA(用于ODBC 3.x规范)。我们的驱动程序和SSIS使用ODBC 3.x规范,但是,在上述情况下,SSIS将行为实现为ODBC2.x。因此,当接收到SQL_NO_DATA的结果时,将返回错误“从对COM组件的调用返回了错误HRESULT E_FAIL”。
根据Microsoft文档:
当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'
我目前无法测试此变通办法,但是您可以尝试两种方法:
在delete命令之后添加一个虚拟选择行
delete from SUMMARY.Data_minutes
where date >= dateadd(day,-5 ,'2019-01-20' )
and date <= '2019-01-20'
select 1
创建一个存储过程,并将日期作为参数传递,然后从“执行SQL任务”执行它(也尝试在该存储过程的末尾添加一个虚拟选择命令)
Exec sp_Delete ?
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句