Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ssis 如何为每个组的成员生成序列号_Ssis_Ssis 2012 - Fatal编程技术网

Ssis 如何为每个组的成员生成序列号

Ssis 如何为每个组的成员生成序列号,ssis,ssis-2012,Ssis,Ssis 2012,我有一张类似的表格: CREATE TABLE dbo.ReportGroups ( ReportName VARCHAR(50) NOT NULL, GroupName VARCHAR(50) NOT NULL, SequenceNumber SMALLINT NOT NULL, CONSTRAINT PK_ReportGroups PRIMARY KEY CLUSTERED (ReportName, GroupName

我有一张类似的表格:

CREATE TABLE dbo.ReportGroups (
    ReportName     VARCHAR(50)    NOT NULL,
    GroupName      VARCHAR(50)    NOT NULL,
    SequenceNumber SMALLINT       NOT NULL,
    CONSTRAINT PK_ReportGroups PRIMARY KEY CLUSTERED (ReportName, GroupName)
)
我从一个平面文件导入到这个表中,这个平面文件只包含报告名和组名,所以我需要生成SequenceNumber。对于每个报告,序号应在1处重新开始


我已经了解了如何使用脚本任务为正常序列号执行此操作,但似乎没有为每个新报告名重新启动。我的猜测是,我需要使用排序转换,然后添加代码来检查报告名称中的更改(?)有人做过类似的事情吗?有没有要共享的示例代码?

是的,我已经按照您的描述完成了这项工作;对数据流中的数据进行排序,并使用脚本分配序列号,每次某个列的值更改时重新开始

不,我手头没有任何示例代码。那是很久以前的事了


如果我今天这样做,并且能够使用暂存表,我会按原样将数据导入暂存表,然后调用一个存储的过程,该过程使用ROW_NUMBER()来分配目标表中的序列号。

正如我所怀疑的,这可以通过添加排序转换,然后调整脚本转换来实现。我在ReportName->GroupName上添加了排序,然后在脚本转换中添加了以下代码:

public class ScriptMain : UserComponent
{
    short seqNum;
    string reportName;

    public override void PreExecute()
    {
        base.PreExecute();

        seqNum = 0;
        reportName = "";
    }

    public override void PostExecute()
    {
        base.PostExecute();
    }

    public override void Input0_ProcessInputRow(Input0Buffer Row)
    {
        if (Row.MapName != reportName)
        {
            reportName = Row.MapName;
            seqNum = 1;
        }
        else
            seqNum++;

        Row.SequenceNumber = seqNum;
    }
}

我在这里删去了帮助和注释,使代码更加简洁易读。

谢谢。我以为我已经在我的问题中提出了我希望避免对SQL进行更改,但我想不会+1尽管回答了这个问题(尽管我会在这里改变顺序)。
SELECT
    ROW_NUMBER() OVER(PARTITION BY ReportName ORDER BY ReportName) As Sequence,
    ReportName,
    GroupName,
FROM ReportGroups