SSIS には、パラメーターと、エラー 0xC0202009 が発生する SQL Server でのキャスト

現象

Microsoft SQL Server の統合サービス (SSIS) パッケージを実行してパラメーターのキャスト エラーのため、実行が失敗した場合次のエラー メッセージが表示されます。

コード: 0xC0202009
データ フロー タスクのソース。
説明: SSIS エラー コード DTS_E_OLEDBERROR。OLE DB エラーが発生しました。エラー コード: 0x80040E21。
OLE DB レコードがあります。 ソース: Microsoft SQL Server ネイティブ クライアント」11.0
Hresult: 0x80040E21 説明:「キャストの無効な文字値」です。


OLE DB ソース コンポーネントでは、パラメーター化されたクエリが含まれているデータ フロー タスクがある場合は、この問題を発生する可能性があります。たとえば、次のクエリがある場合。SELECT mydate FROM dbo.myTable
WHERE mydate >= convert (char, dateadd(year,-1,cast( ? as datetime)))
注 この問題は、クエリ文字列パラメーターと、OLE DB ソース コンポーネントを使用しようとする場合にのみ発生します。"_QM_"パラメーター マーカーは、SSIS のユーザー変数パラメーター 1 SSIS 文字列「20080122」として定義されているにマップします。この問題は、パッケージが Microsoft SQL Server 2005 またはそれ以降のバージョンに移行するために発生します。

原因

問題は、OLE DB がパラメーターを処理する方法で、動作が変更されたために発生します。Microsoft SQL Server 2012 のsp_describe_undeclared_parameters、新しいストアド プロシージャでは、 fmtonly をセットの交換は、パラメーターの型の異なる結果を返します。この変更は仕様です。

クエリの例では、「現象」で元動作は、ある"char(8) にします""?"を記述するにはただし、新しいsp_describe_undeclared_parametersは、"?"に"datetime"に。したがって、OLE DB プロバイダーによって処理される日付文字列から内部のキャストは、エラー メッセージを返します。

解決策

この問題を解決するには、元のデータ型に追加の明示的なキャストを追加するクエリを書き直します。次に、 sp_describe_undeclared_parametersは、正しい、予想される型を返します。「現象」に記載されているクエリの例では、この問題を解決するには、次のようにクエリを更新します。SELECT mydate FROM dbo.myTable
WHERE mydate >= convert(char ,dateadd(year,-1, cast( cast( ? as char(8)) as datetime)))

状況

マイクロソフトは、この問題を「対象製品」セクションに記載されているマイクロソフト製品の問題として認識しています。

ヘルプを表示

スキルを磨く
トレーニングの探索
新機能を最初に入手
Microsoft Insider に参加する

この情報は役に立ちましたか?

フィードバックをお送りいただきありがとうございます!

フィードバックをお寄せいただき、ありがとうございます。Office サポートの担当者におつなぎいたします。

×