2009-06-16 74 views
18

我不得不转换MSSQL存储过程是通过一个varchar这是一个查询:是否有可能在MySQL中执行一个字符串?

INSERT INTO Results 
    EXEC (@Expresion); 

这是行不通的。我很确定EXECEXECUTE不是MySQL命令,但CALL也不起作用。

有谁知道,如果它甚至可能有像JavaScript的eval函数的MySQL?

回答

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是什么? – 2017-01-17 07:47:51

6

这是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声明想要一个会话变量(前缀为@)。如果你试图通过一个正常的变量,它会举起双手在空中,它不会在乎。

+0

`@Expression ='选择“你好,世界!”;';`不适合我。我正在使用MySQL v5.6.30。 – kenorb 2016-08-02 10:42:26

1

EXECUTE MySQL命令只能用于一个预准备语句。

如果想要从字符串执行多个查询,请考虑将它们保存到文件中并将其来源,例如,

SET @query = 'SELECT 1; SELECT 2; SELECT 3;'; 
SELECT @query INTO OUTFILE '/tmp/temp.sql'; 
SOURCE /tmp/temp.sql; 
相关问题