首页 文章

如何在SSIS中接收SP的“输出”变量来计算输入条件IF的数据量

提问于
浏览
0

我有一个如下所示的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

这是图:

enter image description here

当我运行它时,RecordCounter显示我的文件中的总数据数,而不是有多少数据进入了StoredProcedure中的IF块 . 它应该在这种情况下返回2例如,而不是3.我的错误在哪里,我该如何解决?任何帮助,将不胜感激!

1 回答

  • 0

    经过你的一些解释,我想我知道你哪里出错了 .

    我认为除了存储过程中的逻辑之外,你已经做了一切正确的事情 .

    您的存储过程应该像......

    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
    
        SET @Counter = @@ROWCOUNT;  
    
      END
    END
    

    最后,在您的SSIS包中,您可以添加一个聚合任务,以对派生列中更新的所有行进行求和 . 你打包应该看起来像......

    enter image description here

    Component Properties 选项卡上的 OLE DB Transformation 应该具有对存储过程的调用

    Exec [dbo].[ExampleSP] ? , ? , ? OUTPUT
    

    最后在 Column Mapping 选项卡上,OUTPUT参数应该映射到派生列:

    enter image description here

相关问题