3

私は SSIS を初めて使用し、OLE DB ソース ステップで sql ステートメントを使用してデータを取得しているときに問題が発生しました。このデータには、変換が必要な 5 つの DATETIME フィールドとすべてのデータが含まれています。フラットファイルに入ります。

私は次のようにSQLで変換を行っています:

REPLACE(CONVERT(VARCHAR(10), birthdate, 101), '/', '') AS 'Date of Birth (MMDDYYYY)

SSIS フラット ファイル接続マネージャーでは、DataType は文字列 [DT_STR] で、OutputColumnWidth は 8 です。上記の変換により 8 文字の varchar が作成されるため、切り捨てなしで SSIS で動作します。varchar(8) に変換しようとすると、SQL Server Management Studio でデータが切り捨てられます。

私の問題は、次の変換の試みが失敗することです。SQLコードは次のとおりです。

REPLACE(CONVERT(VARCHAR(10), exp_date, 103), '/', '') AS 'Expiration Date

すべてを同じ設定で再現したにもかかわらず、「データが失われる可能性があるため、値を変換できませんでした」というエラーが表示されます。この変換により、日付が ' DDMMYYYY' 形式に変換されます。

これがデータ変換エラーであることは調査からわかっていますが、特に最初の変換が正しく機能している場合に回避する方法がわかりません。

興味深いのは、エラーの行を別のフラット ファイルにリダイレクトすると、日付がまったく問題なく取得および変換されることです。

私はここで途方に暮れており、グループからの助けをいただければ幸いです。

4

1 に答える 1

1

うまくいかない理由がわかりました。私が最初にパッケージを作成したとき、生年月日のみが変換されました。これは、日付形式が異なるために注意が必要だったからです。実行してすべてのデータが取得されていることを確認した後、他の 4 つの日付も変換する必要があることに気付きました。問題は、SQL とフラット ファイル接続マネージャーで変更を行ったにもかかわらず、メタデータがこれら 4 つのフィールドの元の設定に設定されたままであることです。ステップを再作成したところ、すべてが正しく変換されました。お時間を割いてご回答いただきありがとうございます

于 2012-12-04T15:56:45.937 に答える