我将如何比较ssis中的两个平面文件?

时间:2014-01-17 07:22:09

标签: file ssis compare flat

TableOne.txt(txt文件)

LoadNumber  Name    Address
101         Yogesh  ABC
102         Zebra   XYZ
103         Kattle  BTM

TableTwo.txt(txt文件)

LoadNumber  Cost    EName
101         240     Yogesh
105         500     Kavita
110         340     Kamal

现在我要比较这些平面文件。 1.我希望表2中没有的所有数据文本文件库都是LoadNumber,而且我希望表一文本文件库中没有的所有数据都是LoadNumber

3 个答案:

答案 0 :(得分:1)

1-通过平面文件源组件

读取两个文本文件

2- 按LoadNumber排序

3-连接到合并连接组合(连接类型:完全外连接)并通过TableOne.LoadNumber连接 - TableTwo.LoadNumber

基于ISNULL(tableXXXX.LoadNumber)的

4- 条件分割,例如如果TableOne.LoadNumber为null,则表1中缺少

enter image description here

答案 1 :(得分:1)

您可以在SSIS脚本任务中执行C#脚本。 参考:http://www.java2s.com/Code/CSharp/File-Stream/Comparetwofiles.htm

using System; 
using System.IO;  

public class CompFiles {  
  public static void Main(string[] args) {  
    int i=0, j=0;  
    FileStream f1;  
    FileStream f2;  

    try {  
      // open first file 
      try {  
        f1 = new FileStream(args[0], FileMode.Open);  
      } catch(FileNotFoundException exc) {  
        Console.WriteLine(exc.Message);  
        return;  
      }  

      // open second file  
      try {  
        f2 = new FileStream(args[1], FileMode.Open);  
      } catch(FileNotFoundException exc) {  
        Console.WriteLine(exc.Message);  
        return;  
      }  
    } catch(IndexOutOfRangeException exc) {  
      Console.WriteLine(exc.Message + "\nUsage: CompFile f1 f2");  
      return;  
    }  

    // Compare files  
    try {  
      do {  
        i = f1.ReadByte();  
        j = f2.ReadByte();  
        if(i != j) break; 
      } while(i != -1 && j != -1);  
    } catch(IOException exc) {  
      Console.WriteLine(exc.Message);  
    }  
    if(i != j)  
      Console.WriteLine("Files differ."); 
    else 
      Console.WriteLine("Files are the same."); 

    f1.Close();  
    f2.Close();  
  }  
}

答案 2 :(得分:0)

另一种方法可以是将平面文件加载到SQL表格中。使用执行SQL任务来加入表格&得到数据。

使SSIS工作流程更简单,但显然需要2个SQL表。

如果使用此方法,请不要忘记在开始时清除表格。