2016-10-03 2 views
0

可変長の数値をストアドプロシージャに渡して、ストアドプロシージャの出力を制限しようとしています。 1つ、2つ、3つ、4つ、5つ、6つの部門があるとしましょう。だから彼らは1、3、6、あるいは2、4、3だけを選ぶかもしれません。ストアドプロシージャのWHERE句のIN文に変数のように渡すことはできますか?もしそうでなければ、他にどのようにこれを行うかもしれませんか?私はできるだけシンプルにしておきたい。ありがとう!SQLストアドプロシージャのINステートメントで変数を渡す

+0

プレースホルダは、SINGLE値のみを表すことができます。 1つのプレースホルダに複数の値を渡すことはできません。 'WHERE foo IN(?)'と '1,2,3'を渡すと' WHERE foo = '1,2,3''と書かれたように実行されます。任意の数のプレースホルダーがある場合は、事前に準備されたステートメントを使用することはできません。値を持つのと同じ数のプレースホルダーでクエリ文字列を動的に構築し、1:1マッピングでそれらを渡す必要があります。 –

+1

1つのオプションは、コンマで区切られた数字の文字列を一時テーブルに変換し、その後、その一時テーブルを結合するか、そうでなければクエリ内で使用することです。それを行う1つの方法:http://www.codeproject.com/Tips/584680/Using-comma-separated-value-parameter-strings-in-S –

+3

あなたのDBMSは何ですか? – Serg

答えて

0

値の配列をストアドプロシージャに渡す普遍的な堅牢なSQLの方法は、複数のステートメントが必要です。

  1. (一時的な)テーブルに値を挿入します。
  2. このテーブルにロジックを結合する必要があるストアドプロシージャを呼び出します。
  3. (必要な場合)あなたがトランザクションにこれらのステートメントを囲むすることもできます
  4. テーブルから

を最近追加された値を削除します。

関連する問題