是否可以在MySQL中执行字符串?

aar*_*ona 27 mysql evaluation eval execute exec

我必须转换传递varchar一个查询的MSSQL存储过程:

INSERT INTO Results
  EXEC (@Expresion);
Run Code Online (Sandbox Code Playgroud)

这不起作用.我敢肯定,EXECEXECUTE不是MySQL的命令,但CALL也不管用.

有谁知道甚至可能有类似JavaScript的evalMySQL函数吗?

Bra*_*nar 17

EXECUTE是MySQL中的有效命令.MySQL参考手册


Ten*_*giz 17

我想你正在寻找这样的东西:

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;
Run Code Online (Sandbox Code Playgroud)

  • “SET @asd = NULL;”行有什么用途吗?我不明白这是在做什么。 (5认同)

Luc*_*Luc 12

这是SQL的等价物eval(my_string);:

@Expression = 'SELECT "Hello, World!";';
PREPARE myquery FROM @Expression;
EXECUTE myquery;
Run Code Online (Sandbox Code Playgroud)

基本上我结合了现有的答案,都没有告诉你如何准确地做eval.


如果要添加参数,可以使用:

@username = "test";
@password = "asdf";
@Expression = 'SELECT id FROM Users WHERE name = ? AND pass = ?;'
PREPARE myquery FROM @Expression;
EXECUTE myquery USING @username, @password;
Run Code Online (Sandbox Code Playgroud)

并准确地回答原始问题:

@Expression = 'SELECT "Hello, World!";'
PREPARE myquery FROM @Expression;
INSERT INTO Results
  EXECUTE myquery;
Run Code Online (Sandbox Code Playgroud)

请注意,该PREPARE ... FROM语句需要一个会话变量(前缀为@).如果你试图传递一个正常的变量,它会举起手来,它不会在乎.

  • 也许以前需要`SET`. (4认同)