クエリであるvarchar
を渡すMSSQLストアドプロシージャを変換する必要があります。
INSERT INTO Results
EXEC (@Expresion);
これは機能していません。 EXEC
とEXECUTE
はMySQLコマンドではないと確信していますが、CALL
も機能しません。
MySQLのJavaScriptのeval
関数のようなものを持つことが可能かどうか誰かが知っていますか?
EXECUTEはMySQLで有効なコマンドです。 MySQLリファレンスマニュアル
私はあなたがこのようなものを探していると思います:
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;
これは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;
そして元の質問に正確に答えるには:
@Expression = 'SELECT "Hello, World!";'
PREPARE myquery FROM @Expression;
INSERT INTO Results
EXECUTE myquery;
PREPARE ... FROM
ステートメントにはセッション変数(接頭辞@
)が必要であることに注意してください。通常の変数を渡そうとすると、空中に手を上げて気になりません。
EXECUTE
MySQLコマンドは、準備された1つのステートメントに対してのみ使用できます。
文字列から複数のクエリを実行する場合は、それらをファイルに保存してソースすることを検討してください。
SET @query = 'SELECT 1; SELECT 2; SELECT 3;';
SELECT @query INTO OUTFILE '/tmp/temp.sql';
SOURCE /tmp/temp.sql;