22

次の名前のMySQLスクリプトファイルがquery1.sqlあります。

select * FROM $(tblName) LIMIT 10;

MySQLコンソールを使用していますが、パラメータをスクリプトに渡すにはどうすればよいですか?これは変数を転送しません:

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

6 に答える 6

16

ユーザー変数を使用して、説明した動作を実現できます。変数をデータ値ではなくスキーマ識別子として使用するため、クエリを動的に作成できるように、プリペアドステートメントを使用する必要があります。

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
于 2012-12-31T07:08:36.080 に答える
13

vidyadharからのコマンドライン呼び出しは私のために機能しましたが、わずかな変更がありました:

mysql -u root -p -e"set @temp=1; `cat /home/mysql/Desktop/a.sql`"
于 2014-10-16T15:37:39.600 に答える
10

これはあなたのために働くかもしれません

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

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

これはあなたの問題とほとんど同じですそれを試してみてください

于 2012-12-31T07:17:32.367 に答える
1

上記の@user4150422からの回答はほとんど私からはうまくいきましたが、cat許可の問題が発生したため、少し別の方法を使用する必要がありました。奇妙sourceなコマンドは猫の代わりにも機能しませんでしたが、機能しまし\.

mysql -u root -p -e"set @temp=1; `\. /home/mysql/Desktop/a.sql`"
于 2016-10-17T15:37:45.850 に答える
1

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
于 2018-01-03T00:03:40.053 に答える
0

@tblName特定のテーブルに値を挿入するためのように、mysql変数を介してbash変数を使用するための高度なソリューション:

コアファイルinsert.prepsには、プリペアドステートメントの手続き型(SET> PREPARE> EXECUTE> DEALLOCATE)が含まれています。

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;

*は通常、であるSET @id = '0';ため、事前定義されたファイル内。すべての行に適切に自動割り当てされます。idINT AUTO_INCREMENT PRIMARY KEYid

変数を使用してシェルまたは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`"
于 2020-05-19T19:06:33.550 に答える