我正在尝试从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'
答案 0 :(得分:1)
在搜索此问题时,我在Devart support page处发现了一些有趣的地方,报告了类似的问题:
根据Microsoft文档,如果查询未影响任何记录,则将返回结果SQL_NO_DATA(用于ODBC 3.x规范)。我们的驱动程序和SSIS使用ODBC 3.x规范,但是,在上述情况下,SSIS将行为实现为ODBC2.x。因此,当收到SQL_NO_DATA的结果时,将返回错误“从对COM组件的调用返回了错误HRESULT E_FAIL”。
当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 from SUMMARY.Data_minutes
where date >= dateadd(day,-5 ,'2019-01-20' )
and date <= '2019-01-20'
select 1
创建一个存储过程并传递日期作为参数,然后从Execute SQL Task 中执行它(也尝试在存储过程的末尾添加一个虚拟选择命令) < / p>
Exec sp_Delete ?
答案 1 :(得分:0)
我遇到了同样的问题,要解决,我将ODBC连接更改为ADO.net连接。
我希望对您有用。