Domanda

Devo convertire una stored proc MSSQL che passa un varchar che è una query:

INSERT INTO Results
  EXEC (@Expresion);

Questo non funziona. Sono abbastanza sicuro che EXEC e EXECUTE non sono comandi di MySQL, ma CALL non funziona neanche.

Qualcuno sa se è ancora possibile avere qualcosa di simile funzione eval JavaScript per MySQL?

È stato utile?

Soluzione

execute è un comando valido in MySQL. MySQL manuale di riferimento

Altri suggerimenti

Credo che siete alla ricerca di qualcosa di simile:

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;

Questo è l'equivalente SQL di eval(my_string);:

@Expression = 'SELECT "Hello, World!";';
PREPARE myquery FROM @Expression;
EXECUTE myquery;

In pratica ho unito le risposte esistenti, né ti dice come fare esattamente eval.


Se si desidera aggiungere i parametri, è possibile utilizzare questo:

@username = "test";
@password = "asdf";
@Expression = 'SELECT id FROM Users WHERE name = ? AND pass = ?;'
PREPARE myquery FROM @Expression;
EXECUTE myquery USING @username, @password;

E per rispondere alla domanda iniziale esattamente:

@Expression = 'SELECT "Hello, World!";'
PREPARE myquery FROM @Expression;
INSERT INTO Results
  EXECUTE myquery;

Si noti che la dichiarazione PREPARE ... FROM vuole una variabile di sessione (con prefisso @). Se si tenta di passare una variabile normale, si getterà le mani in aria e semplicemente non si cura.

Il EXECUTE comando MySQL può essere utilizzato solo per un dichiarazione preparata.

Se caso in cui si desidera eseguire più query dalla stringa, considera salvandoli in un file e la fonte è, per esempio.

SET @query = 'SELECT 1; SELECT 2; SELECT 3;';
SELECT @query INTO OUTFILE '/tmp/temp.sql';
SOURCE /tmp/temp.sql;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top