2012-04-09 7 views
0

最初は、フラットファイルのセットからデータを一括インポートするTSQLスクリプトをまとめました。 (下記参照)。 SQLSERVERの関数を使用すると、データを必要なデータ型に変換し、データセットで発生する固有の条件に基づいてデータを変換することが容易になりました。たとえば、すべての列には先頭または末尾にスペースを入れることができます。ヌル値を表す日付列は特定の値で、金額のデータは負の数などを表す数値の最後にダッシュを付けることができます。私は、sqlserverのスカラー値関数を使用して、さまざまな条件とcase文を処理して、一貫性のあるデータセットを許可します。フラットファイルデータ(スカラーSQL関数に基づく)を変換するSSISのメソッド

私の目標はこれをSSISに移行することですが、すでにSSIS内で行ったことを複製することは非常に面倒です。 SSISには、文字マップ、データ変換、派生列ツール、スクリプトコンポーネントなど、変換を行うためのツールがあります。 - 私はすでに自分のスクリプトに入っているものを手に入れるために大量の作業をしているようです。私は何かを再利用できるとは思われません。小さなテーブルであれば問題ないかもしれませんが、テーブルあたり50列以上の同じ複雑な情報をキー入力するのは本当に面倒なことです。何かを修正する必要がある場合はそれを維持しますか? uggh。私は何かを欠いているに違いない。ご協力いただきありがとうございます。

  INSERT INTO [TEST1].[dbo].[Table1] 
      SELECT 
       dbo.TRIM([ID]) 
       ,dbo.FixDate([CompleteDate]) 
       ,dbo.TRIM([IsDeleted]) 
       ,dbo.Text2Numeric([QtyTotal]) 
       ,dbo.Text2Numeric([OrderQty]) 
       ,dbo.Text2Money([Price]) 
       FROM OPENROWSET(BULK '\\server1test\temp\import1.txt', FIRSTROW=2, 
       FORMATFILE='\\server1test\temp\import1.Xml' 
      ) as t1 ; 
     GO 
+0

あなたのUDFのために何をしているのか分かりませんが、最終的な解決策がSSIS内でどのように見えるのか誰にも分かりません。 TSQLロジックをSSISの適切な構造に記録することが最も一般的です。見かけの複雑さに基づいて、私はスクリプトコンポーネントを見ていきたいと思います。再使用が決定的な決定点である場合は、ロジックを署名付きDLLにカプセル化し、それをETLサーバーのGACにデプロイし、スクリプトタスク内から参照することになります。 SSISは、openrowsetでスキンクのデータを追跡できるようにする必要があります。 – billinkc

+0

私は関数を投稿することができますが、私は特定の関数のヘルプを探しているわけではありませんが、この一般的な問題をどのように処理するかについては調べています。関数を使って上記の変換を行うのはとても簡単です。私が何かを変更する必要があれば、関数を変更するだけで、それを使用するすべてに適用されます。私はssisに相当するものは見当たりません。私は間違っていると思っています。 – shawno

+0

スクリプトコンポーネントは最善の方法と思われましたが、もう一度やり直してください。私はそのコンポーネントを多くの異なる変換に適用する必要があります。基本的には、同じテーブルの変換または複数の異なるテーブルへの変換のセットです。そしてもう一度。その保守性は少し壊れやすいようです。 – shawno

答えて

0

カスタムDLLとGACを使用しない可能性のあるソリューションは、単にSQL実行タスクを使用することです。私はこれを試して、それは動作しますが、欠点が何であるか不思議です。別の考え方は、Ole DBコマンドを使用して、これをストアドプロシージャコールでラップすることでした。そのアプローチの欠点は何ですか?

関連する問題