2009-04-16 9 views
1

Je suis en train de créer un script batch qui se connecter à une base de données mySQL et une commande de suppression:Script batch pour envoyer des commandes à mySQL db?

@echo off 
echo Resetting all assessments... 
mysql -hlocalhost -urdfdev -p%1 rdf_feedback 
delete from competency_question_answer; 

je vais exécuter ce script avec le mot de passe comme argument de ligne de commande, mais tout ce script est, se connecte à la base de données et l'invite mysql> s'affichera. Après que je sois sorti de mysql, le reste des commandes de batch arrive à s'exécuter (et échoue, pas de surprise).

Comment puis-je passer les commandes SQL du script batch à la console mysql? Est-ce seulement possible?

Répondre

3

Vous devez utiliser des outils de ligne de commande. Je ne sais pas s'il y en a pour MySQL mais pour SQL il y a SQLCMD et pour Oracle il y a OSQL.

Ce que vous pouvez également faire est quelque chose comme ça.

mysql -uuser -ppass < foo.sql 

Où foo.sql correspond aux commandes que vous souhaitez exécuter.

+0

merci, essayé de cette façon et après avoir ajouté une ligne vide à la fin de la foo.sql et en supprimant le dernier point-virgule (semblait causer des problèmes), tout est passé avec succès. –

2

echo "delete from competency_question_answer;" | mysql -hlocalhost -ur... etc.

+0

semble aller dans la bonne direction, mais j'obtiens: ERREUR 1064 (42000) à la ligne 1: Vous avez une erreur dans votre syntaxe SQL; consultez le manuel qui correspond à votre version du serveur MySQL pour la bonne syntaxe à utiliser près de '' delete from competency_question_answer; '' à la ligne 1 –

+0

la commande est correcte quand je le tape dans la console mysql manuellement ... aussi, comment pourrais-je passer plus de commandes? Il semble y avoir un problème avec toutes les guillemets –

+2

Dans Windows, echos <"x">, pas , donc vous devriez probablement supprimer les guillemets. – paxdiablo

3

Vous pouvez essayer de connecter plusieurs fois:

@echo off 
echo Resetting all assessments... 
mysql -hlocalhost -urdfdev -p%1 rdf_feedback -e delete from competency_question_answer; 

Sinon, vous devriez être en mesure de mettre toutes vos commandes dans un fichier séparé, comme input.sql et utilisation:

mysql -hlocalhost -urdfdev -p%1 rdf_feedback <input.sql 
1

Mettre plusieurs jeux des commandes dans les fichiers batch .sql fonctionne mieux, et vous pouvez en exécuter des multiples dans le fichier .bat.

Questions connexes