2017-11-18 8 views
3

SSISパッケージを使用してSQL Serverテーブルにcsvファイルをインポートしようとすると、非常に特殊な状況が発生します。 csvファイルのデータには、二重引用符とコンマを使用できます。そのため、コンマ付きのデータは二重引用符で囲み、二重引用符は二重引用符でエスケープします。私は最初の囲み引用符を正常に処理するためにテキスト修飾子を使用しました。しかし、データがフォーマットされている特定の例があります。"" Anne ""、Annabelle "私は処理できません。データの余分な二重引用符は、コンマでフィールドを終了させるように見えます。私はDerived Column Transformationを使って二重引用符を置き換えようとしましたが、それは問題を引き起こさないかもしれないが役に立たないものです。他の誰かがこの問題に遭遇し、解決策または回避策を見つけましたか?あなたはそれらのフィールドからの引用符を失うことでOKなら、あなたはそれがうまくいくインポートする前に、データ内に複数の二重引用符を含むSSISを使用してSQL Serverにcsvファイルをインポートする

+0

サンプルファイルを提供できますか?たとえそれがヘッダと1つのデータ行だけを含んでいても。それ以外の場合、私はあなたに同様の場合の一般的な解決策を与えることができます。 – Hadi

答えて

1

は、簡単なスクリプトタスクは、あなたのファイルを処理する(以下は「_Processed」は、ファイル名に追加された新しいファイルを作成します):

public void Main() 
{ 
    System.IO.StreamReader reader = null; 
    System.IO.StreamWriter writer = null; 

    try 
    { 
     string filepath = Dts.Variables["User::Filepath"].Value.ToString(); 

     reader = new System.IO.StreamReader(filepath); 

     string fileText = reader.ReadToEnd(); 

     string newFilepath = 
      System.IO.Path.Combine(
       System.IO.Path.GetDirectoryName(filepath), 
       System.IO.Path.GetFileNameWithoutExtension(filepath) + "_Processed" + System.IO.Path.GetExtension(filepath) 
      ); 

     if (System.IO.File.Exists(newFilepath)) 
     { 
      System.IO.File.Delete(newFilepath); 
     } 

     writer = new System.IO.StreamWriter(newFilepath); 

     writer.Write(fileText.Replace("\"\"", "")); 

     Dts.TaskResult = (int)ScriptResults.Success; 
    } 
    catch (Exception ex) 
    { 
     Dts.Events.FireError(0, "Script Task", ex.Message, string.Empty, 0); 
    } 
    finally 
    { 
     if (reader != null) 
     { 
      writer.Close(); 
      writer.Dispose(); 
     } 

     if (writer != null) 
     { 
      writer.Close(); 
      writer.Dispose(); 
     } 
    } 
} 

あなたが引用符を維持したい場合は、私が変更になります。

writer.Write(fileText.Replace("\"\"", "")); 

のようなものに:

writer.Write(fileText.Replace("\"\"", "[double quote removed]")); 

次に、実際の二重引用符を派生列変換に戻すことができます。

このすべての場合、カンマを区切り文字として使用し、テキスト修飾子としてを使用して、標準フラットファイル接続を使用できます。

関連する問題