1

FoxProデータソースがあり、宛先はSQLServer2008です。

FoxPro側には、Dateデータ型の列があります。これは幅8で、最小値は0001-01-01、最大値は9999-12-31です。SQL Server側では、がありdatetimeます。また、幅8、最小値は1753-01-01、最大値は9999-12-31です。

SSISデータフロータスクには、FoxProテーブルを読み取るOLEDBソースコンポーネントがあります。列は、外部列と出力列の両方でDT_DBDateとしてマップされます。SQLServerテーブルへのOLEDB変換先は、その列を取得してDT_DBTIMESTAMPにフローします。DT_DBTIMESTAMPはこれらの日付範囲を適切に処理でき、DT_DBDATEについてはかなり確実です(ただし、MSドキュメントで見つけるのに問題があります)。

問題

タスクを実行すると、「無効な日付形式」と「データ値が特定のタイプをオーバーフローしたために変換に失敗しました」という1900年代初頭頃の値から、 2050.どこが間違っているのか正確にはわかりません。

ボーナス質問

データフロータスクでオーバーフローを処理するにはどうすればよいですか?

4

2 に答える 2

2

のVFPクエリなど、範囲を超えているレコードを検索する単純なVFPクエリを実行することをお勧めします。

select * from yourtable
   where YourDate < date( 1753, 1, 1 )
      or YourDate > date( 9999, 12, 31 )

それらのレコードで問題を確認してください...さらに、境界の問題を引き起こしている可能性のある他の列を確認してください

于 2010-12-02T12:41:44.377 に答える
1

データをどうするかを決める必要があると思います

そのままロードする場合は、データを保持できるようにフィールドのデータ型を変更する必要があります。

または、間違ったデータを修正したい場合は、それを検証して変換する必要があります。

お金をかけたい場合は、AdvancedETLProcessorの使用を検討してください。

Text、XML、Excel、Access、DBF、Foxpro、ODBC、OLE DB、MS Sql Server、Oracle、MySql、PostgreSQL、Firebird、Interbase、SQLite、POP3、SMTP、ファイルシステム、FTP、SSL、Unicodeで動作します。

于 2010-12-15T17:50:11.170 に答える