The general approach for creating dynamic queries in MySQL stored procedures is correct; construct a string of SQL (using CONCAT as necessary), and then execute that SQL. However, there are a few syntax differences between Microsoft SQL Server and MySQL that come into play.
There is no "TOP" clause in MySQL. Instead, use ORDER BY and LIMIT clauses at the end of the query to return the first few rows from a set:
SELECT * FROM theTable ORDER BY someField LIMIT 5
MySQL offers two types of variables. User variables, prefaced with an '@' symbol, persist beyond the routine. Local variables exist only within the routine. In either case, variable assignments in MySQL stored procedures use the SET or SELECT...INTO statements. Building dynamic queries requires use of a user variable, rather than a local variable, along with the SQL syntax for prepared statements:
SET @statement = CONCAT('SELECT * FROM ', tableNameVariable); PREPARE myStatement FROM @statement; EXECUTE myStatement;Click here for more on stored procedures in MySQL. For more on prepared statements in MySQL, read the manual.
Dig Deeper on Linux servers
Related Q&A from Scott Noyes
Get suggestions for choosing MySQL character sets and field collations from expert Scott Noyes. Continue Reading
A MySQL expert describes two ways that the multi-master support can be used. Continue Reading
An expert describes where to find information on detection deadlock algorithms in MySQL. Continue Reading