我在SQL Server 2008中有一个存储过程,如下所示。
ALTER PROCEDURE myStoredProcedure
@Id int,
@hin varchar(30),
@checkValue varchar(30),
@CounterDeceasedPatients int=0 OUTPUT
insert into myTable
values (@Id, @hin, GETDATE())
if (@checkValue is not null)
BEGIN
set @CounterDeceasedPatients = @CounterDeceasedPatients + 1;
update myTable
set hin= @checkValue
where Id = @Id
RETURN;
END
我通过SSIS使用数据流中的OLE DB命令调用此SP,它使我的文件中的每一行都使用sql命令:EXEC [dbo].[myStoredProcedure] ?,?,?
进入SP。 (我的文件中的数据顺序(?)是:Id, hin, checkValue
)
我想要做的是计算在SP中输入if条件的不同记录(不同行)的数量。因此,我认为需要设置一个"行计数器"某处,过滤@checkValue不为空的用法。但我无法找到它。我是SSIS的新手,所以如果有人帮我解决这个问题我很感激。感谢。
编辑:我试图仅选择@checkValue作为我的ROW COUNT的输入参数,但是它给出了错误:
EDIT2:我更新了我的SP。我添加了#34; CounterDeceasedPatients"在SSIS中作为Int32变量并将其赋值为0.我的sql执行命令是:EXEC [dbo].[myStoredProcedure] ?,?,?,?,CounterDeceasedPatients
这给了我错误:
来源:"用于SQL Server的Microsoft OLE DB提供程序" HRESULT: 0x80040E07描述:"将数据类型nvarchar转换为的错误 INT"
当我使用EXEC [dbo].[myStoredProcedure] ?,?,?,?,CounterDeceasedPatients output
作为SQL命令时,我收到错误:
描述:"传递常量时不能使用OUTPUT选项 存储过程。
我需要帮助。
答案 0 :(得分:0)
使用脚本转换和DataFlow级包变量。
创建默认值为0的int类型变量,并在脚本转换中,如果传入行的checkvalue
不为null,则递增变量,然后使用变量的值来设置值你的专栏。
请注意,我建议INSTEAD尝试使用存储过程中的OUTPUT变量更新计数器,而不是试图让这个想法发挥作用。