2012-12-31 137 views
10

我有一个名为query1.sql一个MySQL脚本文件,其中包含:参数传递给MySQL的脚本

select * FROM $(tblName) LIMIT 10; 

我在MySQL控制台,我该如何传递参数给脚本?这不会转发变量:

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

以下链接可以帮助:http://databobjr.blogspot.com/2011/ 07 /传递参数到mysql-query.html –

回答

9

您可以使用user variables来实现您描述的行为。在将变量用作模式标识符而不是数据值时,您必须使用准备好的语句,以便动态组合查询。

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 
+1

尝试了你的代码,它不起作用。 '错误1064(42000):你的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以在第11行'@tblname limit 1'附近使用正确的语法。 –

+0

@Anand,用于简单示例以检查此问题,更新了我的答案。 – MvG

+0

这工作。谢谢! – decapo

5

这可能会为你

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

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

这几乎与你的问题只是尝试

+0

这里第一个不起作用。第二个是。 – silverdr

8

从vidyadhar的命令行调用工作对我来说,只是一个小改动:

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

从@ user4150422以上从我几乎工作答案,但cat给了我许可问题,所以我不得不使用一个轻微的选择。古怪source命令没有到位猫的工作,要么,但\.没有

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

对于bash脚本:

tblName=$1 
searchFor="%something%" 

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