1

SSISを使用してSQLServerテーブルにデータをインポートするためにCSVファイルを試してみています。パッケージは、ファイルソースタスクとSQLServer宛先でシンプルです。

CSVファイルには、Transaction_DateとAccount_Createdの2つのフィールドがあります。これらのフィールドの日付は、2009年1月2日午前6:00:00の形式です。次のエラーメッセージが表示されます。「エラー:データ挿入中に例外が発生しました。プロバイダーから返されるメッセージは次のとおりです。データソースからのString型の指定された値は、指定されたターゲット列のdatetime型に変換できません。」

以下で試した手順:他のさまざまな宛先変換を使用してみました。Flatfile接続マネージャー内のデータ型を試してみました。ソースタスクとSQLServer宛先の間でデータ変換変換を使用してみました。

Transaction_Dateへの接続のみを提供してデータをロードしようとすると、機能します。ただし、Account_Createdにのみ接続を提供してロードしようとすると、失敗します。

私は愚かな何かが欠けていると確信しています。助けてください。

よろしく、KK

ウィザードの使用を開始してから、パッケージをビルドする別の方法に飽きました。Price、Product_nameなどの他の多くの列を持つ実際のCSVファイルを使用しました。パッケージを実行しようとすると、次のような別のエラーメッセージが表示されます。 "[Destination for AdventureWorks [58]]エラー:入力" OLE DB Destination Input "(71 )返された列のステータスは次のとおりです。「データが失われる可能性があるため、値を変換できませんでした。」。「2つの日付フィールドしかないCSVファイルを試したところ、うまく機能しました。

私は今本当に困惑していて、これは私が正しく理解していないある種のデータ型の問題だと思っています。誰かがこの問題に光を当てることができますか?

よろしく、KK

4

1 に答える 1

2

最初の 2 つのフィールド (Transaction_Date、Account_Created) をロードするには、以下を含む DataFlow タスクが必要です。

  • フラットファイルソース
  • 派生列 (2 つの列を作成して、「Transaction_Date」と「Account_Created」を以下の式に置き換えます)
  • SQL Server 宛先

ノート:

  • '1/2/2009 6:00:00 AM' のような日付形式は SSIS によって解析されません。フラットファイル接続マネージャーがフィールドを文字列 (長さ > 22) として扱うことを確認してください。
  • 派生列では、次の式で '01/02/2009' を解析できます。

    (DT_DBDATE)(SUBSTRING([列 2],7,4) + "-" + SUBSTRING([列 2],4,2) + "-" + SUBSTRING([列 2],1,2))

  • ファイル '1/2/2009' にある現在の日付形式では、SSIS の高度な日時解析機能がないため、変換が非常に難しくなります。日と月によっては、可変長文字列から減算する必要があるため、SUBSTRING と FINDSTRING を組み合わせて区切り文字「/」の位置を決定する必要があります。

幸運を

于 2013-02-12T13:23:44.687 に答える