3

オラクル 11g SQL サーバー 2008 R2

OLE DB ソース (Oracle DB) から OLE DB 宛先 (SQL Server) にデータを移動しようとすると、次のエラーが表示されます。エラーが表示される前に、SQL サーバーに追加された 65000 レコードのうち 8922 があります。問題の 8922 の日付列には、必要なときに日付が追加されています。Oracle の列は DATE 型です。SQL Server 2008 の列は日時です。

On the SQL Server, for record # 8922 the RSVP_END_DT = 2007-06-25 12:06:00.000
On the Oracle Server for record # 8922 the RSVP_END_DT = 25-JUN-07
On the Oracle Server, for what should be record # 8923 in the SQL DB, the RSVP_END_DT = 10-AUG-07

「DTE_E」エラーをそれぞれ検索しましたが、解決策が見つかりませんでした。また、データ変換を使用してソース SQL を記述し、正しい SQL 形式で日付を「to_char」として設定しようとしましたが、どちらも機能しません。他に提案はありますか?

[OLE DB Destination [424]] Error: SSIS Error Code DTS_E_OLEDBERROR.  An OLE DB error has occurred. Error code: 0x80040E21.
An OLE DB record is available.  Source: "Microsoft SQL Server Native Client 10.0"  Hresult: 0x80040E21  Description: "Multiple-step OLE DB operation generated errors. Check each OLE DB status value, if available. No work was done.".

[OLE DB Destination [424]] Error: There was an error with input column "RSVP_END_DT" (487) on input "OLE DB Destination Input" (437). The column status returned was: "Conversion failed because the data value overflowed the specified type.".

[OLE DB Destination [424]] Error: SSIS Error Code DTS_E_INDUCEDTRANSFORMFAILUREONERROR.  The "input "OLE DB Destination Input" (437)" failed because error code 0xC020907A occurred, and the error row disposition on "input "OLE DB Destination Input" (437)" specifies failure on error. An error occurred on the specified object of the specified component.  There may be error messages posted before this with more information about the failure.

[SSIS.Pipeline] Error: SSIS Error Code DTS_E_PROCESSINPUTFAILED.  The ProcessInput method on component "OLE DB Destination" (424) failed with error code 0xC0209029 while processing input "OLE DB Destination Input" (437). The identified component returned an error from the ProcessInput method. The error is specific to the component, but the error is fatal and will cause the Data Flow task to stop running.  There may be error messages posted before this with more information about the failure.

[OLE_DB_SOURCE[1]] Error: The attempt to add a row to the Data Flow task buffer failed with error code 0xC0047020.

[SSIS.Pipeline] Error: SSIS Error Code DTS_E_PRIMEOUTPUTFAILED.  The PrimeOutput method on component "OLE_DB_SOURCE" (1) returned error code 0xC02020C4.  The component returned a failure code when the pipeline engine called PrimeOutput(). The meaning of the failure code is defined by the component, but the error is fatal and the pipeline stopped executing.  There may be error messages posted before this with more information about the failure.
4

2 に答える 2

3

これは、このトピックに関する私の以前の回答の 3 つです。そのエラー メッセージが表示された Sql Server の日付の範囲外である可能性が最も高いです。最後の回答で、Datetime と datetime2 のさまざまな制限について説明します。

https://stackoverflow.com/a/11585853/236348

https://stackoverflow.com/a/2231164/236348

https://stackoverflow.com/a/11229159/236348

于 2012-08-13T18:45:10.903 に答える
0

OLEDBソースからデータを取得しながら、ソースの日付列を次のような指定された形式に変換します

YYYY MM DD
Select  TO_CHAR(DateColumn,'yyyy/mm/dd') as CustomDate from yourTable

To_Charを使用する代わりに、いくつかのオラクルの定義済み関数を使用して、正しい形式で日付を取得します。ソース データをさらに強化するために SSIS パイプラインに入る前に、ソース データを強化または変換することをお勧めします

次に、派生列でこの文字列をSQLサーバーの日付時刻形式に変換します

convert(datetime, CustomDate , 111)

SQLサーバーでは、isDate関数で列をチェックするか、値を特定の形式に変換しようとしました

CASE WHEN isDate(DateColumn) = 1 THEN DateColumn ELSE NULL END as DateColumn
or
convert(datetime, '25-JUN-07', 106) -- dd.mm.yyyy
于 2012-08-13T18:03:01.580 に答える