2012-12-31 21 views
10

Tôi có một tập tin script MySQL tên query1.sql chứa:thông số Pass tới MySQL script

select * FROM $(tblName) LIMIT 10; 

Tôi đang ở MySQL console, làm thế nào để vượt qua các tham số để kịch bản? Điều này không chuyển tiếp biến:

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

liên kết sau đây có thể giúp: http://databobjr.blogspot.com/2011/ 07/passing-parameters-to-mysql-query.html –

Trả lời

9

Bạn có thể sử dụng user variables để đạt được hành vi bạn mô tả. Khi bạn sử dụng biến làm định danh giản đồ, không phải là giá trị dữ liệu, bạn sẽ phải sử dụng câu lệnh đã chuẩn bị để bạn có thể soạn truy vấn động.

query1.sql:

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

Được triệu gọi như

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

Đã thử mã của bạn, mã này không hoạt động. 'ERROR 1064 (42000): Bạn có một lỗi trong cú pháp SQL của bạn; kiểm tra hướng dẫn tương ứng với phiên bản máy chủ MySQL của bạn cho cú pháp đúng để sử dụng gần '@tblname limit 1' tại dòng 11' –

+0

@Anand, được sử dụng để làm ví dụ đơn giản để kiểm tra điều này, cập nhật câu trả lời của tôi. – MvG

+0

Điều này đã hiệu quả. Cảm ơn! – decapo

5

Điều này có thể làm việc cho bạn

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

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

này gần như tương tự như vấn đề của bạn chỉ cần thử nó

+0

Ở đây cái đầu tiên không hoạt động. Cái thứ hai. – silverdr

8

Lệnh gọi dòng từ vidyadhar làm việc cho tôi, nhưng chỉ với một thay đổi nhỏ:

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

Câu trả lời từ @ user4150422 trên hầu hết làm việc của tôi, nhưng cat đã cho tôi các vấn đề về quyền vì vậy tôi phải sử dụng một giải pháp thay thế nhỏ. Thật là thú vị source lệnh không làm việc ở vị trí của một trong hai con mèo, nhưng \. đã

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

Đối với kịch bản bash:

tblName=$1 
searchFor="%something%" 

echo "select * FROM $tblName LIMIT 10; 
     select * From $tblName where somecolumn like '$searchFor'; 
" | mysql 
Các vấn đề liên quan