web-dev-qa-db-ja.com

SSIS ODBC:結果セットの列を変数にマッピングすると、「値が期待される範囲内にありません」というエラーが返される

SSIS 2012では、 "SQL実行タスク"を使用して、2つの列を持つ単一の行を返すストアドプロシージャを呼び出しています。その結果セットを2つのSSISユーザー変数にマップします。簡単でしょう?これは、ADO.NETまたはOLEDB接続マネージャーを使用すると機能しますが、ODBC接続マネージャーを使用すると失敗します。

ODBCを使用してマップすると、SSISは次のランタイム例外を返します。

[Execute SQL Task] Error: An error occurred while assigning a value to variable "MyString": "Value does not fall within the expected range."

SQL Server列のデータ型はnvarchar(50)です。 varchar(50)とchar(1)も試してみましたが、役に立ちませんでした。 SSIS変数「MyString」のデータ型はStringです。

Result Set mapping in SSIS

ODBC接続のコードページは1252およびSQL Server 2012の照合順序はSQL_Latin1_General_CP1_CI_AS

SQL Server 2012データベースを使用しています。

参照用のタスクの一般的なセットアップは次のとおりです。

SSIS Execute SQL Task - General tab

ODBC接続を使用してこれを行うことは可能ですか?または、これはSSIS 2012でODBCに対してサポートされていない別のタイプの機能ですか?

2
Brandon S

ODBC SQLタスクでは、最初の位置は0ではなく1であり、これにより問題が完全に解決されました。また、ODBCはエイリアスを認識していないようですエイリアスをresultNameとして使用しないでください。メッセージ「expected range」は結果セットの配置を参照しているようです。つまり、 '0'または名前が変数の位置の範囲に表示されません(1と2などがある場合) 2つ選択、0または3は範囲外)

2
JPrimrose

はい、ODBC接続でこれを行うことができます。ただし、ODBCを使用する場合、結果セットに名前を付ける柔軟性はありません。結果名 "MyNVarchar1"を数値 "0"に変更してみてください"および" MyNVarchar2 "を数値" 1 "に変更します。ODBCは、これらの列を0、1、2などとして参照する必要があります。

1
LCat