SSIS 执行 SQL 任务,受 MERGE 语句影响的行(Oracle 和 SQL Server)
Posted
技术标签:
【中文标题】SSIS 执行 SQL 任务,受 MERGE 语句影响的行(Oracle 和 SQL Server)【英文标题】:SSIS Execute SQL Task, Rows affected on MERGE Statement (Oracle & SQL Server) 【发布时间】:2015-02-02 16:49:17 【问题描述】:我有一个 SSIS 包,我需要在其中执行带有执行 SQL 任务的 MERGE 语句。我需要在 Oracle DB 和 SQL Server 2012 DB 上执行此操作。我的问题是,如何将受影响的行数作为 ResultSet 保存,以便将其保存在 SSIS 包中的变量中?我不需要知道是更新还是插入,也不想在 Oracle 上创建过程,因为 MERGE 是动态的,并且通过变量中的表达式在包中计算。我只想获取受影响的行的值。
P.S.:如果我不能使用执行 SQL 任务,我可以至少使用一个脚本来运行 MERGE 吗?问题是,根据我的阅读,Oracle 上的 ExecuteNonQuery() 不会返回受 MERGE 影响的行。而且我找不到任何有关 SQL Server 的信息。有人可以帮忙吗?
提前致谢。
更新:我刚刚使用 ExecuteNonQuery() 为 SQL Server 检查了一个脚本,它确实返回了受影响的数量或行数。但是,如果我可以避免脚本并使用执行 SQL 任务会更好,但是如何将受影响的行作为 ResultSet?
【问题讨论】:
您绝对可以使用脚本任务来完成。不了解 Oracle,但考虑使用 ExecuteScalar()。 只有在返回表并检索第一列的第一行时,ExecuteScalar() 才起作用?受影响的行数不会在表中返回,是吗? 【参考方案1】:在 SQL Server 上,您可以将 OUTPUT 子句与合并语句一起使用。这里有一些东西供你阅读。 对于 Oracle,请阅读:PLSQL: Get number of records updated vs inserted when a merge statement is used
https://www.simple-talk.com/sql/learn-sql-server/implementing-the-output-clause-in-sql-server-2008/
【讨论】:
问题是我不知道如何获取 SQL%ROWCOUNT 作为 ResultSet,因为它需要是一个表,并且 SELECT FROM DUAL 不起作用,所以我不确定我如何检索该值。 将您的合并语句放在一个存储过程中,该过程在 MERGE 之后执行行数的 SELECT。从执行 SQL 任务中调用存储过程。以上是关于SSIS 执行 SQL 任务,受 MERGE 语句影响的行(Oracle 和 SQL Server)的主要内容,如果未能解决你的问题,请参考以下文章