5

既存のSSISパッケージを介してSQLServerにインポートされるフラットファイルがあります。フラットファイルの新しいフィールドに対応するために、パッケージを変更する必要があります。新しいフィールドは、次の形式の日付フィールドですdd-mmm-yy(例:2011年8月25日)。フラットファイルの日付フィールドは、空(スペース/空白など)であるか、日付が入力されています。フラットファイルの日付形式を制御することはできません。

フラットファイルの日付フィールドを既存のSQLServerテーブルにインポートする必要があり、ターゲットフィールドのデータ型はsmalldatetimeです。

日付を文字列としてロードテーブルにインポートし、ロードテーブルからデータを取得するときにsmalldatetimeに変換することを提案していました。しかし、日付形式dd-mmm-yyを解析して、ロードテーブルからsmalldatetimeへの変換を使用せずに、これをsmalldatetimeフィールドに直接ロードする別の可能な方法はありますか。日付形式、特に月を解析する方法がよくわかりません。どんな提案も歓迎します。

4

2 に答える 2

7

これがあなたに何ができるかについての考えをあなたに与えるかもしれない例です。理想的には、SSISパッケージまたはETLジョブでは、データが希望どおりではない可能性があることを考慮に入れる必要があります。時々ポップアップする可能性のある誤ったデータや無効なデータを処理するには、適切な手順を実行する必要があります。そのため、SSISは、データフロータスク内に多くの変換タスクを用意しており、これらを使用してデータをクリーンアップできます。

あなたの場合、あなたはあなたの要件を達成するためにDerived Column変換または変換を利用することができます。Data conversion

例はで作成されましたSSIS 2008 R2。日付を含むフラットファイルを読み取り、SQLテーブルにロードする方法を示します。

ファイル

フラットファイルデータをインポートするための単純なSQLテーブルを作成しました。

テーブル

SSISパッケージには、SQLへの接続マネージャーとフラットファイル用の接続マネージャーがあります。フラットファイル接続は以下のように構成されています。

繋がり

フラットファイル1

フラットファイル2

フラットファイル3

SSISパッケージで、[制御フロー]タブにデータフロータスクを配置しました。データフロータスクの内部には、フラットファイルソース、派生列変換、およびOLEDB変換先があります。フラットファイルのソースとOLEDBの宛先は単純なので、ここでは省略します。Derived変換は、式を使用して新しい列を作成します(DT_DBDATE)SmallDate。データ変換変換を使用して同じことを行うこともできることに注意してください。この新しい列SmallDateTimeValueは、OLEDB変換先のデータベース列にマップする必要があります。

派生列

このパッケージを実行すると、ファイル内のすべての値が有効であるとは限らないため、失敗します。

失敗した

あなたの場合に失敗する理由は、無効なデータがテーブルに直接挿入されているためです。あなたの場合、テーブルはパッケージを失敗させる例外をスローします。この例では、派生列変換のデフォルト設定では、エラーが発生した場合にコンポーネントが失敗するため、パッケージは失敗します。それでは、エラー行をリダイレクトするためにダミーの変換を配置しましょう。この目的のために、マルチキャスト変換を行います。それは実際には何もしません。理想的には、エラーの原因となったデータを分析できるように、OLE DB変換先または選択した他の変換先コンポーネントを使用して、エラー行を別のテーブルにリダイレクトする必要があります。

派生トランスフォーメーションから赤い矢印をドラッグして、マルチキャストトランスフォーメーションに接続します。これにより、[エラー出力の構成]ダイアログがポップアップ表示されます。[エラーと切り捨て]列の値を[失敗コンポーネント]からに変更しますRedirect row。これにより、エラー行がマルチキャストトランスフォーメーションにリダイレクトされ、テーブルには入りません。

エラー出力の構成

これで、パッケージを実行すると、正常に実行されます。各方向に表示される行数に注意してください。

成功

これがテーブルに入ったデータです。2行のみが有効でした。ファイル内のデータを示した最初のスクリーンショットを見ると、2行だけが有効であることがわかります。

SSISパッケージに要件を実装するためのアイデアが得られることを願っています。

テーブルデータ

于 2011-08-25T21:16:46.747 に答える
3

そのままSMALLDATETIMEフィールドに直接ロードする必要があります。日付はSQLServerの単なる数字であり、目的の日付/時刻形式でユーザーに表示されることを忘れないでください。SSISパッケージは、2011年8月25日を日付データ型として正しく読み取り、問題なくSMALLDATETIMEフィールドに挿入する必要があります。

パッケージがエラーなどをスローしていましたか?

于 2011-08-25T20:26:05.973 に答える