2012-03-29 12 views
5

के साथ MySQL परिवर्तन डेटाबेस मैं एक चर सेट कर रहा हूं, और फिर मैं डेटाबेस बदलने के लिए USE कमांड का उपयोग करना चाहता हूं। दुर्भाग्य से USE चर का मूल्यांकन नहीं करता है।परिवर्तनीय मान

SET @con="testDB"; 
Query OK, 0 rows affected (0.00 sec) 
select @con; 
+--------+ 
| @con | 
+--------+ 
| testDB | 
+--------+ 
1 row in set (0.00 sec) 
use @con; 
ERROR 1049 (42000): Unknown database '@con' 

तो जब मैं कनेक्ट करने का प्रयास करता हूं तो चर के मान का मूल्यांकन नहीं किया जाता है। कोई विचार?

+0

मुझे लगता है कि आप चाहते हैं ": =" के बदले "=" जब सेट – keyser

+0

का उपयोग कर यह वही अगर मैं का उपयोग करें: = या सिर्फ =, अभी भी अर्थ उपयोग – bioShark

+0

@con स्ट्रिंग का मूल्यांकन करने की कोशिश करता है हाँ। बस यह पाया: "आप एसईटी के अलावा अन्य बयानों में उपयोगकर्ता चर के लिए एक मान भी निर्दिष्ट कर सकते हैं। इस मामले में, असाइनमेंट ऑपरेटर होना चाहिए: = और नहीं = क्योंकि बाद वाले को तुलना ऑपरेटर = गैर-एसईटी स्टेटमेंट में माना जाता है : "। क्षमा करें मैं हालांकि मदद नहीं कर सकता। कोशिश करने के लिए – keyser

उत्तर

5

मुझे अपना स्वयं का समाधान मिला है, इसलिए यदि कोई दिलचस्पी लेता है, तो मैं अपने स्वयं के प्रश्न का उत्तर देने जा रहा हूं।

@outis आप सही हैं, USE कमांड के साथ एक चर का उपयोग करना संभव नहीं है।

हालांकि, इस तथ्य है कि मैं एक डेटाबेस रनटाइम पर निर्दिष्ट में एक तालिका बनाने के लिए चाहते हैं के कारण, मेरे समाधान गतिशील एसक्यूएल उपयोग करने के लिए होगा:

set @schema="testDB"; 
set @front="CREATE TABLE IF NOT EXISTS "; 
set @endpart=".`TEST1` (DIM_ID INT(16)) ENGINE = InnoDB DEFAULT CHARACTER SET = utf8 COLLATE = utf8_unicode_ci;"; 
set @stat=concat(@front,@schema,@endpart); 
prepare command from @stat; 
execute command; 

तो मूल रूप से इस समाधान बयान बनाता है, तैयार करता है यह और इसे निष्पादित करता है। @schema पैरामीटर भी स्क्रिप्ट पर चिपकाया जा सकता है। इस तरह मैं गतिशील रूप से निर्माण कथन का निर्माण करता हूं।

+0

इसे स्वीकार किए जाने के रूप में भी चिह्नित करना याद रखें। – keyser

+0

यह कहता है कि मुझे इसे स्वीकार करने के लिए 2 दिन का इंतजार करना होगा ..... – bioShark

+0

'तैयार करने के आदेश को रद्द करने के लिए अच्छा होगा;' – MyGGaN

0

मुझे नहीं लगता कि यह किसी भी तरह से USE @var; पर संभव है। लेकिन कुछ मामलों में यह एक और विकल्प हो सकता है।

USE testDB; 
SET @schema = DATABASE(); 
संबंधित मुद्दे