我需要将一个传递了一个查询的 varchar
的 MSSQL 存储过程进行转换:
INSERT INTO Results
EXEC (@Expresion);
这行代码无法正常工作。我相当确定EXEC
和EXECUTE
不是MySQL的命令,但CALL
也不起作用。
有人知道是否可以在MySQL中类似于JavaScript的eval
函数吗?
我需要将一个传递了一个查询的 varchar
的 MSSQL 存储过程进行转换:
INSERT INTO Results
EXEC (@Expresion);
这行代码无法正常工作。我相当确定EXEC
和EXECUTE
不是MySQL的命令,但CALL
也不起作用。
有人知道是否可以在MySQL中类似于JavaScript的eval
函数吗?
我认为你在寻找类似于这样的东西:
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;
基本上,我结合了现有的答案,但没有告诉你如何确切地执行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
语句需要一个会话变量(以@
为前缀)。如果您尝试传递普通变量,它将无能为力。
SET
。 - kenorbEXECUTE
MySQL命令只能用于一个预处理语句。
如果您想要执行多个查询字符串,请考虑将它们保存到文件中并进行源码引用,例如:
SET @query = 'SELECT 1; SELECT 2; SELECT 3;';
SELECT @query INTO OUTFILE '/tmp/temp.sql';
SOURCE /tmp/temp.sql;
SET @asd = NULL;
的行是有意义的吗?我不明白这是在做什么。 - Jsilvermist