如何在加载带有SSIS包中额外逗号的文件时拒绝行

时间:2018-03-07 04:27:19

标签: sql-server ssis etl

我想在将数据从平面文件加载到Sql server时拒绝行,并使用额外的逗号处理行并将它们重定向到平面文件

实施例

ID,FirstName,LastName,City
1,Robert,Gurera,Phoenix
2,Tom,Bradley,Cleveland,5
3,Jack,Williams,Dallas
4,Tim,Doherthy,San franscisco,6,7

我想拒绝第2行和第4行并将它们加载到平面文件

任何帮助表示赞赏

由于

2 个答案:

答案 0 :(得分:0)

这很简单:

  1. 创建平面文件源。转到高级,然后添加新列column 5,如下所示
  2. img

    1. 接下来,检查列。您需要做的是,使用conditional split transformation将第5列中包含数据的行重定向到另一个目标。
    2. img2

      如果您确定来自平面文件的长度,请务必添加更多列。

答案 1 :(得分:0)

如果你真的需要检查我会检查使用脚本组件源:

加载到一列并拆分。

如果长度正确,则将该行发送到数据流,否则将其发送到故障路径(最有可能是平面文件或其他内容。

如果您需要更多解释,请告诉我。

我只是查看了你的数据,你可以使用split并只处理左边的4列(0-3)。

以下是代码:

using System.IO;

static void Main(string[] args)
{
    using(var reader = new System.IO.StreamReader(@"C:\test.csv"))
    {
        while (!reader.EndOfStream)
        {
            var line = reader.ReadLine();
            var values = line.Split(','); //Make sure single quote to represent char

            if(values.length == 4)
            {
                 Output0Buffer.AddRow();
                 Output0Buffer.Id=int.Parse(values[0]);
                 Output0Buffer.Fname = values[1];
                 Output0Buffer.LastName = values[2];
                 Output0Buffer.City = values[3];
            }
            else
            {
                  BadRowBuffer.AddRow();
                  BadRowBuffer.BadRow = line.ToString();
            }
        }
    }
}

您需要设置输出。