2009-06-16 11 views
18

私は、クエリであるvarcharを渡すMSSQLストアドプロシージャを変換する必要があります:MySQLで文字列を実行することは可能ですか?

INSERT INTO Results 
    EXEC (@Expresion); 

これは動作しません。私は、EXECEXECUTEはMySQLのコマンドではないと確信していますが、CALLも動作しません。

誰かが、MySQLのJavaScriptのeval関数のようなものを持っている可能性も知っていますか?

答えて

13

私はあなたがこのような何かを探していると思う:

SET @queryString = (
SELECT CONCAT('INSERT INTO user_group (`group_id`,`user_id`) VALUES ', www.vals) as res FROM (
    SELECT GROUP_CONCAT(qwe.asd SEPARATOR ',') as vals FROM ( 
      SELECT CONCAT('(59,', user_id, ')') as asd FROM access WHERE residency = 9 
    ) as qwe 
) as www 
); 

PREPARE stmt FROM @queryString; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 
SET @asd = NULL; 
+1

最後のコマンドには「@ ads」とは何ですか? –

6

これはeval(my_string);のSQLと同等です:

@Expression = 'SELECT "Hello, World!";'; 
PREPARE myquery FROM @Expression; 
EXECUTE myquery; 

基本的に私は、既存の答えを組み合わせない、どちらもわかります正確にevalを実行する方法。

@username = "test"; 
@password = "asdf"; 
@Expression = 'SELECT id FROM Users WHERE name = ? AND pass = ?;' 
PREPARE myquery FROM @Expression; 
EXECUTE myquery USING @username, @password; 

そして正確に元の質問に答えるために:あなたはパラメータを追加したい場合は


、あなたはこれを使用することができますPREPARE ... FROM文がセッション変数を望んでいること

@Expression = 'SELECT "Hello, World!";' 
PREPARE myquery FROM @Expression; 
INSERT INTO Results 
    EXECUTE myquery; 

注意を(接頭辞は@です)。通常の変数を渡そうとすると、手を空中に投げてしまい、気にしません。

+0

'@Expression = 'SELECT"こんにちは、世界! ";';'は私のためには機能しません。私はMySQL v5.6.30を使用しています。 – kenorb

+0

@kenorbこれは最近のmysqlバージョンで動作していると確信しているので奇妙です。別の区切り文字を設定することとは関係がありますか? (私はそれをしたかもしれないが、それがこのことに影響したことを忘れていた。) – Luc

+3

おそらく 'SET'が必要になるかもしれない。韻のために – kenorb

1

EXECUTE MySQLコマンドは、1つのプリペアドステートメントでのみ使用できます。

文字列から複数のクエリを実行する場合は、ファイルに保存してソースとすることを検討してください(例:

SET @query = 'SELECT 1; SELECT 2; SELECT 3;'; 
SELECT @query INTO OUTFILE '/tmp/temp.sql'; 
SOURCE /tmp/temp.sql; 
関連する問題