2011-04-03 3 views
2

J'ai un long script que j'ai besoin d'exécuter sur plusieurs bases de données différentes (toutes avec les mêmes tables et noms de champs).MySQL Variables qui stockent le nom de la base de données

Ce que je voudrais faire est quelque chose comme ceci:

1 SET @TARGET_DATABASE = 'beta' 
2 SET @SOURCE_DATABASE = 'sandbox'; 
3 
4 CREATE DATABASE IF NOT EXISTS @TARGET_DATABASE; 
5 USE @TARGET_DATABASE; 

... 

10 INSERT INTO `tableFoo` SELECT * FROM @SOURCE_DATABASE.`tableFoo`; 

Sur la ligne 10, je reçois une erreur (je ne suis pas surpris): « ligne de script: 10 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 « @SOURCE_DATABASE tableFoo. » à la ligne ... »

J'ai donc essayé cette insted pour la ligne 10:

10 SET @TABLE=CONCAT('`',@SOURCE_DATABASE,'`','.`tableFoo`'); 
11 INSERT INTO `tableFoo` SELECT * FROM @TABLE; 

... et à nouveau erreur "Ligne de script: 11 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 '@TABLE' à la ligne ... "Comme vous pouvez le voir, la ligne 10 fonctionne bien ...

Y at-il un moyen de se référer à une table dans une base de données avec une variable

//

Répondre

2

Merci Il fonctionnera si vous concat toute requête Essayez:...

set @db = 'mydb'; 
set @tble = 'table'; 

set @query = concat('INSERT INTO tablefoo SELECT * FROM ', @db, '.', @tble); 
PREPARE stmt FROM @query; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 
+0

Je ne l'ai pas encore testé votre solution que j'avais pour aller de l'avant et le résoudre de la même façon que je l'ai fait jusqu'à présent, je reviens quand je l'ai testé. –

Questions connexes