我有一个如下所示的SQL过程:
CREATE PROCEDURE [dbo].[ExampleSP]
@ID int,
@name varchar(30),
@Counter int output
AS
BEGIN
SET NOCOUNT ON;
---- ********************************************************************************************************
if (@name is not null)
BEGIN
update People
set name = @name
where Id = @ID
END
set @Counter = @@ROWCOUNT
END
我想要的是计算输入if条件的行数!
在SSIS中 - >我有一个公共变量,默认情况下称为RecordCounter = 0 .
我的控制流程中有一个数据流任务 .
在数据流中: - >我有一个平面文件源,从.dat文件中读取数据 .
文件中的示例数据:
ID|NAME
1 Jack
2
3 Mike
然后,我有Derived Column,将RecordCounter作为列添加到数据中 .
RecordCounter <add as new column> @[User::RecordCounter] four-byte signed integer [DT_I4]
然后,我有OLE DB命令,它使数据逐行到我的SP . SQL命令是:
EXEC [dbo].[ProcessClientRegistryRecord] ?,?,? OUTPUT
最后,我有一个Row Count项,映射变量User :: RecordCounter
这是图:
当我运行它时,RecordCounter显示我的文件中的总数据数,而不是有多少数据进入了StoredProcedure中的IF块 . 它应该在这种情况下返回2例如,而不是3.我的错误在哪里,我该如何解决?任何帮助,将不胜感激!
1 回答
经过你的一些解释,我想我知道你哪里出错了 .
我认为除了存储过程中的逻辑之外,你已经做了一切正确的事情 .
您的存储过程应该像......
最后,在您的SSIS包中,您可以添加一个聚合任务,以对派生列中更新的所有行进行求和 . 你打包应该看起来像......
在
Component Properties
选项卡上的OLE DB Transformation
应该具有对存储过程的调用最后在
Column Mapping
选项卡上,OUTPUT参数应该映射到派生列: