2009-03-31 15 views
18

क्या MySQL में डेटाबेस का नाम एक चर में रखने का कोई तरीका है? उदाहरण के लिए, जब मैं, एक डाटाबेस 'DB1' नामक मैं कुछ इस तरह कर सकते हैं:परिवर्तनीय डेटाबेस नाम

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

संपादित करें:

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

कोई विशेष प्रोग्रामिंग भाषा या पर्यावरण? डेटाबेस के साथ कनेक्शन यह है कि यह निर्दिष्ट है। –

+0

यह सिर्फ mysql है .. मैं इसे myadmin – grilix

+2

पर डंप करूंगा क्या आप एक उपयोग कथन http://dev.mysql.com/doc/refman/5.0/en/use.html का उपयोग कर सकते हैं? –

उत्तर

19
काफी के साथ

: मुझे क्या करना चाहते हैं का एक और उदाहरण है प्रयास, हाँ।

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

या .. यह काम करता है, लेकिन मेरे पास बहुत अधिक प्रश्न हैं .. :( – grilix

+0

क्षमा करें। यह उतना अच्छा है जितना यह हो जाता है। – chaos

+0

क्या मैं इसके साथ आवेषण कर सकता हूं – grilix

1

का उपयोग करना Chaos' 'Prepare Statement' solution मैं एक संग्रहीत प्रक्रिया जो एक चर डेटाबेस नाम का उपयोग करता बनाने में कामयाब रहे।

संग्रहित प्रक्रिया के साथ एक डेटाबेस से दूसरे डेटाबेस में डेटा माइग्रेट करने के लिए एक आकर्षण की तरह काम करता है। इस तरह कोड को एक डेटाबेस में पिन नहीं किया जाता है।

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 ; 
संबंधित मुद्दे