3

SSIS 2008でSQL実行タスクを使用して、ストアドプロシージャの出力パラメーターをパッケージ変数にマップしようとしています。

パッケージ変数はSSISタイプのDateTimeであり、ストアード・プロシージャーのパラメーターはSQLタイプのDATETIMEです。

SQLステートメントはEXEC GetCurrentDate @CurrentDate=?であり、パラメーターマッピング画面では、パラメーターは、出力方向とデータ型DBTIMESTAMPが指定されたパッケージ変数にマップされます。

パッケージを実行すると、次のエラーが発生します。

[SQLタスクの実行]エラー:クエリ「EXECGetCurrentDate @ CurrentDate =?」の実行が失敗し、次のエラーが発生しました:「変数「User::CurrentDate」に割り当てられている値のタイプが現在の変数タイプと異なります。変数は異なる場合があります実行中に型を変更します。Object型の変数を除いて、変数型は厳密です。考えられる失敗の理由:クエリの問題、「ResultSet」プロパティが正しく設定されていない、パラメータが正しく設定されていない、または接続が正しく確立されていない。

実行中のクエリでトレースを実行すると、タイプがdatetime2と見なされていることがわかります。

declare @p3 datetime2(7)
set @p3=NULL
exec sp_executesql N'EXEC GetCurrentDate @CurrentDate=@P1 ',N'@P1 datetime2(7) OUTPUT',@p3 output
select @p3

タイプがdatetime2であると想定している理由を誰かが知っていますか?

ありがとう

4

2 に答える 2

3

Micorsoft Connect バグ レポートで回答を見つけました。

これは予期された動作であり、新しい SQL 日時型の変更の結果であるため、このケースはクローズしています。SQL タスクにネイティブの oledb 接続マネージャーを使用しています。COM 相互運用のプロセスでは、VARIANT を使用して値を保持します。データの損失を防ぐ唯一の方法は、値を BSTR バリアントとして保存することです。User::dateParam を String 型に変更すると機能します。または、マネージ接続マネージャーを使用して COM 相互運用をバイパスするように切り替えることもできます。

http://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=307835

于 2009-05-18T12:48:38.527 に答える