Передача параметров в MySQL script

У меня есть файл MySQL script с именем query1.sql, который содержит:

select * FROM $(tblName) LIMIT 10;

Я в консоли MySQL, как передать параметр в script? Это не пересылает переменную:

mysql> \. query1.sql -v tblName=Users

Ответ 1

Вы можете использовать пользовательские переменные для достижения описанного вами поведения. Поскольку вы используете переменную как идентификатор схемы, а не значение данных, вам придется использовать подготовленный оператор, чтобы вы могли запросить запрос динамически.

query1.sql:

SET @query = CONCAT('Select * FROM ', @tblName, ' LIMIT 10');
PREPARE stmt FROM @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

Вызывается как

mysql> SET @tblName = 'Users'; \. query1.sql

Ответ 2

Вызов командной строки из vidyadhar работал у меня, но только с небольшой модификацией:

mysql -u root -p -e"set @temp=1; `cat /home/mysql/Desktop/a.sql`"

Ответ 3

Это может сработать для вас

mysql -u root -p -e"set @temp=1;" < /home/mysql/Desktop/a.sql

и

mysql> set @temp=some_value;
mysql> source file.sql

это почти похоже на вашу проблему, просто попробуйте

Ответ 4

Ответ от @user4150422 выше почти работал у меня, но cat дал мне разрешения, поэтому мне пришлось использовать небольшую альтернативу. Команда weirdly source тоже не работала вместо cat, но \. сделала

mysql -u root -p -e"set @temp=1; `\. /home/mysql/Desktop/a.sql`"

Ответ 5

Для bash сценариев:

tblName=$1 
searchFor="%something%"

echo "select * FROM $tblName LIMIT 10;
      select * From $tblName where somecolumn like '$searchFor';
" | mysql