2012-03-14 23 views
1

SSISパッケージがあります。ソースはSQLクエリです。宛先はテーブルです。パッケージは、宛先テーブルの列をdatetimeからdatetimeoffset(0)に変更するまで機能しました。DateTimeOffset列にSSIS getdate - データ値がデータ型をオーバーフローしました

これで、この特定の列でデータ値がプロバイダによって使用された型をオーバーフローしたため変換に失敗しました。

ソースクエリの値はgetdate()です。私はTODATETIMEOFFSET(getdate()、 ' - 05:00')を試してみました。実際には、これまで取り組んできました唯一のものは、ソースクエリに次のハードコードにある

cast('3/14/12' as datetime) 

情報の唯一の他の興味深い部分はソースを実行するときに、パッケージがうまく働いていたということです別のサーバーに対して照会すると設定が関係する可能性がありますが、2つのサーバーの間に明らかな違いはありません。

+0

私は同様の問題を抱えていて、ここに挙げられていることを実行することが助けになりました。http://social.msdn.microsoft.com/Forums/en/sqlintegrationservices/thread/8d097a17-af40-417f-9ab2-add67bf5468c私は派生列で使用するための明示的なフォーマットを作った。痛みはありますが、dateTime要素を持つSSISで起こっている奇妙なことがあるようです。 – wergeld

+0

データフローの列のデータ型は何ですか?ソースクエリからパスを右クリックし、メタデータ – billinkc

答えて

2

私はそれに対処するための「データ変換要素」を追加することをお勧めするつもりだったが、あなたが先にのみ変更するので、それはあなたがするあなたのソースクエリを変更することができることを意味します

select cast(YOUR_DATE_COLUMN as datetimeoffset(0)) 
+0

を選択します。これで最終的にこれが解決されました。 getdate()でソースの精度が高すぎることがわかりました。ミリ秒単位で値をハードコーディングしても失敗しました。まだ古いメソッドが別のサーバーで動作していたのはなぜか分かりませんが、明示的にdatetimeoffset(0)にキャストしていました。 – Mayo

0

他の誰かが探している場合、ソースがSQL 2005の場合(datetimeoffsetのサポートなし)に動作する代替ソリューションが見つかりました。

select dateAdd(minute,datediff(minute,0,getutcdate()),0) 

精度を低下させることを意図しています。私も秒を失うことができますが、私は秒で上記の行をしようとすると、私はオーバーフローのエラーが発生します。

関連する問題