【发布时间】:2020-05-08 22:05:00
【问题描述】:
我有一个正在执行动态 SQL 的 SSIS 包。动态 SQL 有时会有结果集,有时没有,但我只想捕获 COUNT,它是下面脚本中的返回值。
(或者我可以使用 C# 脚本任务来完成此任务吗?),我知道我可以遍历 C# 中的记录集,但我不会总是有 2 个,有没有办法通过名称或其他东西来区分结果集,或者仅通过结果集 [x] 中的数组索引?
-- These are passed values in SSIS as paramaters
DECLARE @VariablePassedForSelect AS VARCHAR(50) = ?
DECLARE @ScriptToExecute NVARCHAR(MAX) = ?
-- putting return value count from dynamic script into variable
DECLARE @ReturnRowsEffectedA INT
-- this MAY (or may not) return a result set as dynaic code
exec sp_executesql @ScriptToExecute, N'@VariablePassedForSelect BIGINT, @ReturnRowsEffected INT OUTPUT', @VariablePassedForSelect = @VariablePassedForSelect, @ReturnRowsEffected = @ReturnRowsEffectedA OUTPUT
-- now select results for returning,this is only value I want
SELECT @ReturnRowsEffectedA AS RowCountR
所有这些在 SQL 中都可以正常工作,并从动态 SQL 和计数返回结果集,但我只想将 COUNT 返回到 SSIS 中的变量中。
如果我使用结果集,我会收到单行错误(因为动态 sql 可以返回结果和计数)。
我这样做的三个原因,而不是使用 SP 或其他方式,但我的问题不需要这些细节。
我怎样才能只捕获@ReturnRowsEffectedA 的值?
【问题讨论】:
-
您应该能够在
Execute SQL Task的Parameter Mapping窗格中将@ReturnRowsEffectedA配置为输出参数。 sqlserverrider.wordpress.com/2014/08/31/… 有一个简单的例子 -
我尝试了一些变体,但我运行以返回计数的代码不是 SP,因此没有官方 RETURN 语句,我无法从不在 SP 中的选择执行 RETURN(即我找到了),上面的代码必须在没有 SP 的情况下以这种方式运行。所以 SSIS 中的输出参数不起作用。
-
如果你只想要计数,你就不能改变你构建的动态sql,使其不返回第一组记录吗?
标签: c# sql-server ssis dataset sp-executesql