none
SSISでフラットファイル(CSV)からデータをインポートする際、特定項目がNULLであれば上の行の値を利用したい。 RRS feed

  • 質問

  • SSIS初心者です。教えてください。

     

    フラットファイルのキーとなるコードにNULLがあります。

    以下のようにデータを取り込みたい場合どのように設定すれば良いかご教授頂けますでしょうか。


    元データ (実際のNULLの部分は値なしです)
    親コード 子コード 氏名
    0001,01,山田 太郎
    0002,01,佐藤 一郎
    NULL,02,佐藤 次郎
    NULL,03,佐藤 三郎
    0003,01,山本 しんじ


    期待する取り込み後データ
    親コード 子コード 氏名
    0001 01 山田 太郎
    0002 01 佐藤 一郎

    0002 02 佐藤 次郎

    0002 03 佐藤 三郎

    0003 01 山本 しんじ

     

    2010年9月16日 11:56

回答

  •  

    1、変換元と変換先をドラッグアンドドロップして、変換元のCSVを定義したのち、変換先のマッピングを行います。この時、変換元で「データソースのNULL値をデータフローでNULL値として保持する」にチェックを入れてください。
    2、変換元と、変換先の間にスクリプトコンポーネントを挟みます。(任意で言語を変えてください、私はVBにしています)
    3、「入力列」の選択時に、変更したい列(今回は「親コード」)の「使用法の種類」を’ReadWrite'にします
    4、例えばこんな実装をします。行をメンバ変数に保存しておき、NULLが現れたら値を代入します。

     Dim m_親コード As String = "0000"
     Public Overrides Sub 入力0_ProcessInputRow(ByVal Row As 入力0Buffer)
      '
      ' Add your code here
      '
      If Row.親コード_IsNull Then Row.親コード = m_親コード
      m_親コード = Row.親コード
     End Sub
    

    そのままフラットファイル変換先としてCSVに吐き出した結果です

    親コード,子コード,氏名
    0001,01,山田 太郎
    0002,01,佐藤 一郎
    0002,02,佐藤 次郎
    0002,03,佐藤 三郎
    0003,01,山本 しんじ
    
    • 回答としてマーク 山本春海 2010年9月21日 5:50
    2010年9月16日 18:14

すべての返信

  •  

    1、変換元と変換先をドラッグアンドドロップして、変換元のCSVを定義したのち、変換先のマッピングを行います。この時、変換元で「データソースのNULL値をデータフローでNULL値として保持する」にチェックを入れてください。
    2、変換元と、変換先の間にスクリプトコンポーネントを挟みます。(任意で言語を変えてください、私はVBにしています)
    3、「入力列」の選択時に、変更したい列(今回は「親コード」)の「使用法の種類」を’ReadWrite'にします
    4、例えばこんな実装をします。行をメンバ変数に保存しておき、NULLが現れたら値を代入します。

     Dim m_親コード As String = "0000"
     Public Overrides Sub 入力0_ProcessInputRow(ByVal Row As 入力0Buffer)
      '
      ' Add your code here
      '
      If Row.親コード_IsNull Then Row.親コード = m_親コード
      m_親コード = Row.親コード
     End Sub
    

    そのままフラットファイル変換先としてCSVに吐き出した結果です

    親コード,子コード,氏名
    0001,01,山田 太郎
    0002,01,佐藤 一郎
    0002,02,佐藤 次郎
    0002,03,佐藤 三郎
    0003,01,山本 しんじ
    
    • 回答としてマーク 山本春海 2010年9月21日 5:50
    2010年9月16日 18:14
  • スクリプト初めての使用でしたが、正しく動かすことができました。

    ありがとうございました。

    2010年9月17日 4:05
  • こんにちは、もょもと さん。

    MSDN フォーラムのご利用ありがとうございます。フォーラム オペレーターの 山本です。

    Chuki さんからの情報が解決に役立ったようでしたので、勝手ながら私のほうで回答としてマークさせていただきました。
    Chuki さん、有効な情報ありがとうございます。

    回答としてマークすることで、今後同じ問題でこのスレッドを参照された方にも、有効な情報がわかり易くなるかと思いますので、解決に役立った情報や、参考になった情報などには、回答としてマークすることをお願いしています。
    お手数ですが、次回から もょもと さんも回答としてマークをしてみてくださいね。

    今後とも、MSDN フォーラムをよろしくお願いいたします。それでは。
                                                         
    マイクロソフト株式会社 フォーラム オペレーター 山本 春海
    2010年9月21日 5:50