我必须转换一个传递varchar
查询的 MSSQL 存储过程:
INSERT INTO Results
EXEC (@Expresion);
这是行不通的。我很确定这不是 MySQL 命令,但EXEC
也不起作用。EXECUTE
CALL
有谁知道是否有可能eval
为 MySQL 提供类似 JavaScript 的功能?
我必须转换一个传递varchar
查询的 MSSQL 存储过程:
INSERT INTO Results
EXEC (@Expresion);
这是行不通的。我很确定这不是 MySQL 命令,但EXEC
也不起作用。EXECUTE
CALL
有谁知道是否有可能eval
为 MySQL 提供类似 JavaScript 的功能?
我想你正在寻找这样的东西:
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;
这是 SQL 等价物eval(my_string);
:
@Expression = 'SELECT "Hello, World!";';
PREPARE myquery FROM @Expression;
EXECUTE myquery;
基本上我结合了现有的答案,都没有告诉你如何准确地进行评估。
如果要添加参数,可以使用:
@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 中的有效命令。MySQL 参考手册
EXECUTE
MySQL 命令只能用于一个准备好的语句。
如果您想从字符串执行多个查询,请考虑将它们保存到文件中并获取它,例如
SET @query = 'SELECT 1; SELECT 2; SELECT 3;';
SELECT @query INTO OUTFILE '/tmp/temp.sql';
SOURCE /tmp/temp.sql;