web-dev-qa-db-ja.com

SSIS SQLタスク-「パラメーター名が認識されません」

単一の行を更新する簡単な更新を実行する必要があるSQLタスクがあります。

SQLStatementを次のように設定しました。

update agency set AgencyLastBatchSeqNo = ? where agencyID = ?

[パラメーターマッピング]ページで、正しい値が含まれていることがわかっている変数にパラメーター0とパラメーター1を設定しました。パラメーター名の値も正しく設定しました。

データベースでは、列AgencyLastBatchSeqNoはint、AgencyIDはbig intです。誰もがSSISでデータ型がマップするものを見つけるための参照を持っていますか? intの場合はSHORT、big intの場合はLONG​​を推測しました。

タスクを実行すると、次のエラーが表示されます。

[SQLタスクの実行]エラー:クエリ「代理店セットAgencyLastBatchSeqNo =?を更新」を実行すると、次のエラーで失敗しました。「パラメータ名が認識されません。」。考えられる失敗理由:クエリの問題ResultSet」プロパティが正しく設定されていない、パラメータが正しく設定されていない、または接続が正しく確立されていない。

誰かが間違っているかもしれないものを提案できますか?

ありがとう

ロブ。

32
Rob Bowman

これに対する答えは、パラメーターマッピング画面でパラメーター名の値を変更することです。

次のクエリがある場合

SELECT Id, AnimalName FROM dbo.Farm WHERE Farm_id = ?

パラメータがUser :: Farm_idという名前の整数変数であると仮定します
パラメータマッピング画面で次の値を選択します

Variable Name  -   User::Farm_id
Direction      -   Input
Data Type      -   LONG
Parameter Name -   0
Parameter Size -   -1

元々、パラメータ名は「NewParameterName」になります。これを変数マーカーの順序位置( "?")に変更するだけです

87
John DaCosta

言及していないことの1つは、接続タイプです。その場合のパラメーターマーキングは?ではないため、ADO.Netを使用していないと思います。他のタイプの接続の場合、パラメーターの名前は次のとおりです。
ADO(ADO.Netではない)接続:パラメーター名はParam1、Param2 ...
ODBC接続:パラメーター名は1,2,3 ... OLEDB接続:パラメーター名は0,1,2 ...です.

変数タイプの場合(パラメーターマッピングセクションではSSISの他の領域とは異なります)、通常はIntにLongを使用し、長さを-1に設定したままにします。 LongはIntとBigintの両方で機能すると信じています。

3
William Salzman

複数のパラメーターを使用している場合、SQLタスクの実行ウィンドウでパラメーターマッピングに移動し、パラメーターの数とパラメーターのサイズに応じて、パラメーター名を0,1,2,3 ....に設定します。これは、問題を解決するのに役立つはずです。

3
Heema

SSISデータ型を参照してください。

   int = DT_I4  (4 byte integer) = Int32 variable
bigint = DT_I8  (8 byte integer)  = Int64 variable
1
Damir Sudarevic

値を引用符で囲み、列名にタイプミスがないことを確認してください。

0
cyberconte

パラメーターマッピングを定義するときに、パラメーター名の後に後続する空白があると、このメッセージが表示される場合があります。

0
Eugene P.