2012-12-31 14 views
10

ho un file di script di MySQL chiamato query1.sql che contiene:parametri pass per MySQL sceneggiatura

select * FROM $(tblName) LIMIT 10; 

Sono in console MySQL, come faccio a passare il parametro allo script? Questo non inoltra la variabile:

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

seguito collegamento potrebbe aiutare: http://databobjr.blogspot.com/2011/ 07/passing-parameters-to-mysql-query.html –

risposta

9

È possibile utilizzare user variables per ottenere il comportamento che descrivi. Quando si utilizza la variabile come identificativo dello schema, non come valore di un dato, sarà necessario utilizzare un'istruzione preparata in modo da poter comporre la query in modo dinamico.

query1.sql:

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

invocato come

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

Provato il tuo codice, non funziona. 'ERRORE 1064 (42000): si è verificato un errore nella sintassi SQL; controlla il manuale che corrisponde alla versione del tuo server MySQL per la sintassi corretta da utilizzare vicino a '@tblname limit 1' alla riga 11' –

+0

@Anand, utilizzato per semplificare un esempio per verificare ciò, aggiornato la mia risposta. – MvG

+0

Questo ha funzionato. Grazie! – decapo

5

Questo può funzionare per voi

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

e

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

questo quasi simile al vostro problema basta provare

+0

Qui il primo non funziona. Il secondo fa. – silverdr

8

La linea chiamata comando dal Vidyadhar lavorato per me, ma solo con una piccola modifica:

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

La risposta da @ user4150422 sopra quasi funzionato da me, ma cat mi ha dato problemi di autorizzazione quindi ho dovuto usare una leggera alternativa. Stranamente comando source non ha funzionato al posto del gatto sia, ma ha fatto \.

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

Per script bash:

tblName=$1 
searchFor="%something%" 

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