2012-02-08 18 views
3

WHERE IN(@variable)句で変数を使用する必要があります。これは、複数の動的値がストアドプロシージャ変数に渡されるためです。これまでMS SQLでこれを行ってきましたが、パラメータを分割する関数を作成していましたが、MySQLで実装できるかどうかはよくわかりません。IN句のMySQL変数

私は本当に他のオプションがないので、私はこれを動作させることができますか?

おかげ

答えて

4

多分FIND_IN_SETがお手伝いします。

+0

最初はうまくいくかもしれないと思っていましたが、私はFIND_IN_SET(id、table)のように実装します。ここでIDは変数の文字列であり、テーブルはテーブル/フィールドを参照する必要があります。しかし、mySQLのリファレンスマニュアルでは、最初の引数にコンマ(、)が含まれていればFIND_IN_SETは機能しません。 – Encryption

+1

助けてくれてありがとう。これは実際には次のように機能します:FIND_IN_SET(table_column、variablestring)。私はそれを後方に持っていた。 – Encryption

1

どのようにサブSELECTステートメントで、その後、一時テーブルでは、あなたが興味を持っている価値を置くのいずれかあなたのメインテーブルに一時テーブルに参加したり、それを使用してはどうですか?

run-idの列と値の列を使用して実際の表を使用し、結合でrun-idを使用すると、SQLまたはストアド・プロシージャを並行して呼び出すことができます。

+0

私はあなたの第2段落に従っているかわかりません。しかし、tempテーブルは実行可能ですが、実行中の最初のストアドプロシージャからストアドプロシージャを作成するストアドプロシージャを呼び出す必要があります。これをサポートできるMS SQL関数が見つかりましたが、MySQLには関数がありません。このコードをMySQLに翻訳することは可能ですか? – Encryption

+0

DECLARE StempにVARCHAR(10) WHILE LEN(psCSString)をBEGIN としての機能(SID VARCHAR(20))otTempテーブルを返し [DBO]。[Fn_SplitParms] ( \t psCSString VARCHAR(MAX) ) をCREATE ( SETのpsCSString = SUBSTRING(psCSString、ISNULL(NULLIF - > 0 SET Stempに= LEFT(1、-1)、 LEN(psCSString))psCSString、ISNULL(NULLIF(CHARINDEX( ''、psCSString))をBEGIN CHARINDEX( '、'、psCSString)、0)、 LEN(psCSString))+1、LEN(@ psCSString) INSERT INTO otTemp VALUES(sTemp) END RETURN END – Encryption

+0

申し訳ありませんが、私はMySQLを使用していません。 2番目の段落は、一時テーブルを使用できない場合に備えて、後で考えました。実際のテーブルを使用する必要がある場合、異なる呼び出しからデータを分離するために何かを行う必要があります(同時かどうか)。 1日の終わりにテーブルをクリーンアップするか、実行ごとに部分的にクリーンアップすることができます。うまくいけば、私よりもMySQLに精通した人があなたをさらに助けることができたらと思っています。 – theglauber