2009-03-31 12 views
18

Est-il possible de mettre le nom de la base de données dans une variable dans MySQL? Par exemple, quand j'ai une base de données appelée « DB1 », puis-je faire quelque chose comme ceci:nom de la base de données variable

set @db= 'db1'; 
select * from @db.mytable; 

EDIT: Il est un autre exemple de ce que je veux faire:

set @dbfrom= 'db1'; 
set @dbto= 'db2'; 
insert into @dbto.mytable (col1,col2,col3) select col2,col1,col3 from @dbfrom.mytable; 
+0

Un langage de programmation ou un environnement particulier? La connexion avec la base de données est là où cela est spécifié. –

+0

c'est juste mysql .. Je vais le vider à myadmin – grilix

+2

Pourriez-vous utiliser une déclaration d'utilisation http://dev.mysql.com/doc/refman/5.0/en/use.html? –

Répondre

19

Avec beaucoup effort, oui.

SET @db = 'db1'; 
SET @q = CONCAT('SELECT * FROM ', @db, '.mycol'); 
PREPARE stmt FROM @q; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 
+0

ya .. cela fonctionne, mais j'ai beaucoup de grandes questions .. :( – grilix

+0

Désolé, c'est aussi bon que ça obtient – chaos

+0

Puis-je faire des insertions avec ce ? – grilix

1

En utilisant Chaos' 'Prepare Statement' solution j'ai réussi à créer une procédure stockée qui utilise un nom de base de données variables. Fonctionne comme un charme pour la migration de données d'une base de données vers une autre avec une procédure stockée. De cette façon, le code n'est pas épinglé à une base de données unique.

DELIMITER $$ 

DROP PROCEDURE IF EXISTS `SampleProcedure` $$ 
CREATE PROCEDURE `SampleProcedure`(IN HubDatabaseName VARCHAR(255)) 
BEGIN 

SET @db = HubDatabaseName; 
SET @q = CONCAT(' 

/* Import data from Hub database to local database */ 
INSERT INTO `table_name_in_local_database` 
SELECT 
    * 
FROM 
    ', @db ,'.`tablename` 

'); 

PREPARE stmt FROM @q; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 

END $$ 
DELIMITER ; 
Questions connexes