将参数传递给MySQL脚本

将参数传递给MySQL脚本,mysql,Mysql,我有一个名为query1.sql的MySQL脚本文件,其中包含: select * FROM $(tblName) LIMIT 10; 我在MySQL控制台中,如何将参数传递给脚本?这不会转发变量: mysql> \. query1.sql -v tblName=Users 您可以使用来实现所描述的行为。当您将变量用作模式标识符而不是数据值时,必须使用准备好的语句,以便动态组合查询 query1.sql: SET @query = CONCAT('Select * FROM ', @t

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

select * FROM $(tblName) LIMIT 10;
我在MySQL控制台中,如何将参数传递给脚本?这不会转发变量:

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
这可能对你有用

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

这几乎与您的问题相似,请尝试一下

来自vidyadhar的命令行调用对我有效,但只做了一点小小的修改:

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

上面@user4150422的回答几乎对我有效,但是
cat
给了我权限问题,所以我不得不使用一个轻微的替代方案。奇怪的是,
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
对于powershell:

$tblName="MyTable"
$searchFor="%something%"

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

高级解决方案通过mysql变量(如
@tblName
)使用bash变量,以便将值插入特定表中:

核心文件insert.preps包括准备好的过程语句(SET>PREPARE>EXECUTE>DEALLOCATE):

*
SET@id='0'id
通常是
INT AUTO\u INCREMENT主键,所以文件中的code>是预定义的。它将自动为所有行分配适当的
id

在shell或bash脚本中使用变量调用它:

mysql --defaults-extra-file=<(echo $'[client]\npassword='"$db_password") --user=$db_user $db_name -e "
     SET @tblName = '$table';
     SET @time = '$timeStamp';
     SET @file = '$file';
     SET @status = '$status';
`cat /path/to/insert.preps`"

mysql--defaults extra file=下面的链接可能会有帮助:尝试了你的代码,它不起作用<代码>错误1064(42000):您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解第11行“@tblname limit 1”附近使用的正确语法,并更新了我的答案。在这里,第一个不起作用。第二个是。
SET @query = CONCAT("INSERT INTO ", @tblName, " (id, time, file, status) VALUES (?, ?, ?, ?)");
PREPARE stmt FROM @query;
SET @id = '0';
EXECUTE stmt USING @id, @time, @file, @status;
DEALLOCATE PREPARE stmt;
mysql --defaults-extra-file=<(echo $'[client]\npassword='"$db_password") --user=$db_user $db_name -e "
     SET @tblName = '$table';
     SET @time = '$timeStamp';
     SET @file = '$file';
     SET @status = '$status';
`cat /path/to/insert.preps`"