1

最初に、一連のフラット ファイルからデータを一括インポートする TSQL スクリプトを作成しました。(下記参照)。SQLSERVER で関数を使用すると、データを必要なデータ型に変換し、データ セットで遭遇する可能性のある固有の条件に基づいてデータの変換を処理するのは簡単でした。たとえば、すべての列の先頭または末尾にスペースを含めることができ、null 値を表す日付列は特定の値であり、お金であるデータは数値の末尾に負の数を表すダッシュを含めることができます。 sqlserver のスカラー値関数を使用して、さまざまな条件と case ステートメントを処理し、一貫したデータ セットを可能にします。

私の目標は、これを SSIS に移行することですが、SSIS 内で既に行ったことを複製するのは非常に面倒です。SSIS には、変換を行うためのツール (文字マップ、データ変換、派生列ツール、スクリプト コンポーネントなど) があります。-- スクリプトにすでにあるものを取得するのは、膨大な量の作業のようです。何かを再利用できるようには見えません。小さなテーブルではそれで問題ないかもしれませんが、テーブルごとに 50 列以上の同じ複雑な変換をキー入力するのは本当に面倒です。うーん。私は何かが欠けているに違いない。ご協力いただきありがとうございます。

            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 
4

1 に答える 1

0

カスタム dll と GAC を使用しない解決策として、SQL 実行タスクを使用する方法があります。私はこれを試してみましたが、うまくいきますが、欠点は何だろうと思っています。もう 1 つの考えは、Ole DB コマンドを使用して、これをストアド プロシージャ コールにまとめるというものでした。そのアプローチの欠点は何ですか?

于 2012-04-18T16:10:06.613 に答える