2009-06-16 76 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; 
相關問題