1. ホーム
  2. sql-server

[解決済み】フラットファイルの日付カラムで「キャスト指定に無効な文字値があります」を修正する方法とは?

2022-01-26 15:38:33

質問

CSVファイルで、各行が{LF}で区切られ、日付の列が次のような書式で記述されているものがあります。 "12/20/2010" (引用符を含む)

保存先のカラムは、SQL Server 2008データベースの日付型(datetimeではない)のテーブルです。

フラットファイル接続マネージャで、日付カラムのデータ型は、以下のように設定しました。 date [DT_DATE] で、TextQualifiedをtrueに設定し、列の区切り記号を {LF} (それは各行の最後の列です)。テキスト修飾子を "

これをOLEデスティネーションに読み込もうとすると、以下のエラーが発生します。

[trn_dorps [760]]です。エラーです。SSISエラーコードDTS_E_OLEDBERROR。 OLE DB エラーが発生しました。エラーコードです。0x80004005. OLE DBレコードが利用可能です。 出典 "Microsoft OLE DB Provider for SQL Server" Hresult: 0x80004005 Description: "キャスト指定の文字値が無効です". [trn_dorps [760]]です。エラーです。入力カラム ""CYCLE_DATE"" にエラーが発生しました。入力「OLE DB宛先入力」(773)上の「OLE DB宛先入力」(874)を参照してください。返された列のステータスは次のとおりです。"データを失う可能性があるため、値を変換できませんでした"。

データビューアを付けると、パイプラインの値が 2010-12-20 00:00:00.0000000 - は、この時間成分が原因なのでしょうか?この時間成分を除去するために (DT_DATE)(DT_DBDATE)[CYCLE_DATE] が、パイプラインの中では同じままなので意味がない

解決方法

最終的には、フラットファイル接続のカラムタイプを "データベース日付 [DT_DBDATE]" に設定することで解決できました。

どうやら、これらの日付フォーマットの違いは、以下のようなものらしい。

DT_DATE 年、月、日、からなる日付構造。 と時間 {のようなものです。 .

DT_DBDATE 年、月、日の3つからなる日付構造。

DT_DBTIMESTAMP 年、月、時、分、秒、端数からなるタイムスタンプ構造体

カラムタイプをDT_DBDATEに変更することで、問題は解決しました。データビューアを添付したところ、CYCLE_DATEの値は時間の要素を含まない単なる「2010/12/20」となり、どうやら問題は解決したようです。