我已经配置了一个带有执行 SQL 任务的 Microsoft SQL Server 2008 R2 SSIS 包,以在 Oracle 10.2 数据库上运行 PL/SQL 查询。
执行 SQL 任务(名为“SQL 更新 MY_STATUS 标志”)正在使用带有“OLE DB 的本机 OLE DB\Oracle 提供程序”提供程序的 OLE DB 连接管理器。所有其他任务设置都是默认值。
查询很简单:
UPDATE MY_TABLE
SET MY_STATUS = 1
WHERE MY_STATUS = 0
(注意:此查询在 SQL Developer 中使用分号终止符运行时成功。这里省略了终止符,因为如果包含分号,SSIS 会生成无效字符错误。)
当我开始调试时,任务开始执行然后无限期挂起,包没有完成执行。
调试输出窗口显示此消息:
警告:SQL 更新 MY_STATUS 标志处的 0x0:多步 OLE DB 操作生成错误。检查每个 OLE DB 状态值(如果可用)。没有做任何工作。
(任务的行为与配置为直接输入或变量的查询相同。)
在这种情况下,这个“多步骤”警告是什么意思?我必须做什么才能让执行 SQL 任务成功?
任务挂起的原因是我在 SQL Developer 客户端窗口中针对 MY_TABLE 运行了单独的更新语句,并且没有完成事务。由于事务仍处于打开状态,执行 SQL 任务无法完成。在 SQL Developer 中提交事务允许 SSIS 包完成,但是,它仍然生成相同的警告消息。
看来警告消息是无害的,尽管我仍然不知道如何解释它。
注意 Microsoft SQL Server DBA!SQL Developer Oracle 查询窗口不像 SQL Server Management Studio 那样工作!DML 查询不是隐式事务,因此 INSERT、UPDATE 或 DELETE 语句会留下一个打开的事务,除非您单击工具栏上的 COMMIT 或 ROLLBACK 按钮。从我的错误中学习。