विधि 1: अस्थायी तालिका
जवाब पहले से ही एक अस्थायी तालिका का उपयोग कर के बारे में पोस्ट आमतौर पर सबसे उपयुक्त समाधान हो जाएगा। लेकिन एक महत्वपूर्ण बात यह है कि यदि प्रश्न चलाया जाता है, तो सभी शामिल होने आदि को संसाधित किया जाएगा, जो कुछ मामलों में संभावित रूप से लंबे समय तक ले सकता है। सौभाग्य से, MySQL LIMIT 0
को कोई पंक्तियां वापस करने की अनुमति देता है और documentation बताता है कि यह "तुरंत एक खाली सेट देता है"।
CREATE PROCEDURE showColumns(IN sqlToShow TEXT)
BEGIN
DROP TEMPORARY TABLE IF EXISTS tempTable;
SET @sqlLimit0 = CONCAT('CREATE TEMPORARY TABLE tempTable AS (SELECT * FROM (',
sqlToShow, ') subq LIMIT 0)');
PREPARE stmt FROM @sqlLimit0;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SHOW COLUMNS FROM tempTable;
END;
एक महत्वपूर्ण बात यह है: निम्न संग्रहीत प्रक्रिया इनपुट के रूप में एक एसक्यूएल क्वेरी स्ट्रिंग ले रही है, LIMIT 0
साथ यह लपेटकर, गतिशील क्वेरी चलाने अस्थायी तालिका निर्माण करने के लिए और फिर अपने कॉलम दिखा कर आप के लिए यह काम करेगा पास की गई क्वेरी में अंत में अर्ध-कॉलन नहीं होना चाहिए। (संग्रहीत प्रक्रिया अनुगामी अर्द्ध कोलन को दूर करने के लिए संशोधित किया जा सकता है यदि आवश्यक हो लेकिन मैं इसे सरल रखने के लिए करना चाहता था।)
यहाँ एक रहते कार्रवाई में यह दिखा डेमो है: http://rextester.com/NVWY58430
विधि 2: INFORMATION_SCHEMA।कॉलम
ही जानकारी SHOW COLUMNS
द्वारा लौटाए भी INFORMATION_SCHEMA.COLUMNS
तालिका से सीधे प्राप्त किया जा सकता:
SELECT TABLE_NAME AS `Table`,
COLUMN_NAME AS `Field`,
COLUMN_TYPE AS `Type`,
IS_NULLABLE AS `Null`,
COLUMN_KEY AS `Key`,
COLUMN_DEFAULT AS `Default`,
EXTRA AS `Extra`
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA` = SCHEMA() -- This uses the current schema
AND `TABLE_NAME` IN ('table1', 'table2', 'etc.');
-- ...or could go even further and restrict to particular columns in tables if desired
तालिका की आवश्यकता होती है (और वैकल्पिक स्तंभ) नाम का नुकसान से ऊपर ग्रस्त मैन्युअल रूप से दर्ज किया जाना है और SELECT
में उपनाम नाम नहीं दिखा रहा है लेकिन यह मूल कार्य करता है। इसके फायदे यह और अस्थायी तालिका बनाने की अनुमति जानकारी लौटे इस तरह अधिकतम वर्ण सीमा, संख्यात्मक परिशुद्धता/पैमाने, स्तंभ टिप्पणियों आदि के रूप में आगे स्तंभ में जानकारी प्रदान करने के लिए बढ़ाया जा सकता है करने के लिए उपयोगकर्ता की आवश्यकता नहीं है कर रहे हैं
क्या आप बस एक तालिका और उनकी संबंधित जानकारी से जुड़े कॉलम पुनर्प्राप्त करना चाहते हैं? –
हाँ लेकिन डायनामिक क्वेरी से, तालिका –
से नहीं, परिणाम सेट के बारे में मेटाडेटा लाने के लिए एपीआई हैं। आप किस प्रोग्रामिंग भाषा पर्यावरण का उपयोग करते हैं? अधिकांश भाषाओं के लिए समाधान होना चाहिए, लेकिन एक उदाहरण प्रदान करने के लिए मुझे यह जानने की आवश्यकता होगी कि आप किस का उपयोग करते हैं। –