2011-08-25 15 views
5

私は、既存のSSISパッケージを介してSQL Serverにインポートされるフラットファイルを持っています。私はフラットファイルの新しいフィールドに対応するために、パッケージを変更する必要があります。新しいフィールドは、dd-mmm-yyの形式の日付フィールドです(例:25-AUG-11)。フラットファイルの日付フィールドは空白(空白や空白など)または日付が入力されます。私はフラットファイルの日付形式を制御することはできません。データインポート中にフラットファイルのdd-mmm-yy値をsmalldatetimeにフォーマットするにはどうすればよいですか?

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

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

答えて

7

ここでは、できることのアイデアを示す例を示します。理想的には、SSISパッケージまたは任意のETLジョブでは、データが正確であるとは限りません。間違ったデータや無効なデータを処理するには、適切な手順を実行する必要があります。そのため、SSISはデータフロータスク内でデータをクリーンアップするために使用できる多くの変換タスクを提供しています。

場合によっては、Derived Column変換またはData conversion変換を使用して要件を満たすことができます。

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

File

私は、フラット・ファイル・データをインポートするために、単純なSQLテーブルを作成しました。 SSISパッケージの

Table

、私は、フラットファイルのためのSQLと1に接続マネージャを持っています。フラットファイル接続は以下のように構成されています。 SSISパッケージの

Connection

Flat file 1

Flat file 2

Flat file 3

、私は制御フロー]タブの[データフロータスクを置きました。内部では、データフロータスク、フラットファイルソース、派生カラム変換、およびOLE DB宛先があります。フラットファイルのソースとOLE DBの宛先は単純なので、ここではそれらをそのまま残しておきます。Derived変換では、式(DT_DBDATE)SmallDateを持つ新しい列が作成されます。データ変換変換を使用して同じことを行うこともできます。この新しい列SmallDateTimeValueは、OLE DB Destinationのデータベース列にマップする必要があります。

Derived column

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

Failed

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

派生変換から赤い矢印をドラッグし、マルチキャスト変換に接続します。 「エラー出力の構成」ダイアログがポップアップ表示されます。エラーと切り捨ての列の値をから無効な構成要素Redirect rowに変更します。これにより、エラー行がマルチキャスト変換にリダイレクトされ、テーブルに入ることはありません。今

Configure Error output

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

Success

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

希望は、あなたの要件をSSISパッケージに実装することを提案します。

Table data

+1

スクリーンショットは素晴らしいです、+1 – eddiegroves

3

SMALLDATETIMEフィールドにそのままロードする必要があります。覚えておいて欲しいのは、日付はSQL Serverの数字だけで、希望の日付/時刻形式でユーザーに提示されます。 SSISパッケージは日付データ型として25-AUG-2011を正しく読み、それをSMALLDATETIMEフィールドに問題なく挿入する必要があります。

パッケージにエラーが発生しましたか?

+0

パッケージは、変換エラーを投げていたが、Somoneのはこれがそう、私は彼らのためにチェックを行うと、NULL(DT_DATE)を挿入する必要があるため、スペース/空白のレコードのものであってもよい私に言いました。 – suggy1982

関連する問題