У меня есть файл MySQL script с именем query1.sql
, который содержит:
select * FROM $(tblName) LIMIT 10;
Я в консоли MySQL, как передать параметр в script? Это не пересылает переменную:
mysql> \. query1.sql -v tblName=Users
У меня есть файл MySQL script с именем query1.sql
, который содержит:
select * FROM $(tblName) LIMIT 10;
Я в консоли MySQL, как передать параметр в script? Это не пересылает переменную:
mysql> \. query1.sql -v tblName=Users
Вы можете использовать пользовательские переменные для достижения описанного вами поведения. Поскольку вы используете переменную как идентификатор схемы, а не значение данных, вам придется использовать подготовленный оператор, чтобы вы могли запросить запрос динамически.
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
Вызов командной строки из vidyadhar работал у меня, но только с небольшой модификацией:
mysql -u root -p -e"set @temp=1; `cat /home/mysql/Desktop/a.sql`"
Это может сработать для вас
mysql -u root -p -e"set @temp=1;" < /home/mysql/Desktop/a.sql
и
mysql> set @temp=some_value;
mysql> source file.sql
это почти похоже на вашу проблему, просто попробуйте
Ответ от @user4150422 выше почти работал у меня, но cat
дал мне разрешения, поэтому мне пришлось использовать небольшую альтернативу. Команда weirdly source
тоже не работала вместо cat, но \.
сделала
mysql -u root -p -e"set @temp=1; `\. /home/mysql/Desktop/a.sql`"
Для bash сценариев:
tblName=$1
searchFor="%something%"
echo "select * FROM $tblName LIMIT 10;
select * From $tblName where somecolumn like '$searchFor';
" | mysql