क्या मैं तार्किक रूप से स्तंभों को तालिका में रख सकता हूं?


93

यदि मैं Microsoft SQL सर्वर में किसी तालिका में एक स्तंभ जोड़ रहा हूं, तो क्या मैं उस कॉलम को नियंत्रित कर सकता हूं जहां कॉलम तार्किक रूप से प्रश्नों में प्रदर्शित होता है?

मैं डिस्क पर स्तंभों के भौतिक लेआउट के साथ गड़बड़ नहीं करना चाहता, लेकिन जब संभव हो तो मैं तार्किक रूप से समूह स्तंभों को एक साथ करना चाहूंगा ताकि SQL सर्वर प्रबंधन स्टूडियो जैसे उपकरण तालिका की सामग्री को सुविधाजनक तरीके से सूचीबद्ध करें।

मुझे पता है कि मैं SQL प्रबंधन स्टूडियो के माध्यम से टेबल के लिए उनके "डिज़ाइन" मोड में जाकर और स्तंभों के क्रम को घसीट कर ऐसा कर सकता हूं, लेकिन मैं इसे कच्चे SQL में करने में सक्षम होना चाहता हूं ताकि मैं ऑर्डर कर सकूं कमांड लाइन से स्क्रिप्ट की गई।


उत्तर के लिए बहुत देर हो चुकी है लेकिन इस लिंक पर एक नज़र डालें। blog.sqlauthority.com/2013/03/11/…
sqluser



और एक अन्य संबंधित सवाल, के बारे में है कि क्या यह मायने रखती है stackoverflow.com/questions/6692021/...
टिम एबेल

Microsoft कनेक्ट: स्तंभ क्रम बदलने के लिए ALTER टेबल सिंटैक्स - प्रतिक्रिया हमेशा की तरह चॉकलेट-चायदानी किस्म की है WONTFIX
टिम एबेल

जवाबों:


77

आप नई तालिका बनाए बिना यह प्रोग्रामिक रूप से (सुरक्षित तरीके से) कर नहीं सकते।

एंटरप्राइज़ प्रबंधक जब आप पुन: क्रमबद्ध करते हैं, तो एक नई तालिका बनाने के लिए, डेटा को स्थानांतरित करने और फिर पुरानी तालिका को हटाने और मौजूदा तालिका में नया नाम बदलने के लिए क्या करता है।

यदि आप अपने कॉलम को किसी विशेष क्रम में / समूहबद्ध करना चाहते हैं, तो उनके भौतिक क्रम में बदलाव किए बिना, आप एक दृश्य बना सकते हैं, जो आपकी इच्छा हो सकती है।


43

मुझे लगता है कि यहां हर कोई गायब है, हालांकि यह है कि हर किसी को देश और दुनिया भर में स्थापित एक ही सॉफ्टवेयर सिस्टम के 10, 20, या 1000 के उदाहरणों से नहीं निपटना है ... हममें से जो सॉफ्टवेयर बेचते हैं, वे डिजाइन करते हैं। परिणामस्वरूप, हम समय के साथ प्रणालियों का विस्तार करते हैं, नई क्षमता की आवश्यकता के रूप में फ़ील्ड्स को जोड़कर तालिकाओं का विस्तार करते हैं, और जैसे ही उन क्षेत्रों की पहचान की जाती है, वे एक मौजूदा तालिका में हैं, और इस तरह, विस्तार करने, बढ़ने, फ़ील्ड जोड़ने, आदि के एक दशक में। तालिकाओं के लिए .... और फिर डिजाइन से उन तालिकाओं के साथ काम करने के लिए, समर्थन करने के लिए, कभी-कभी कच्चे डेटा में खुदाई करने के लिए / नई कार्यक्षमता बग को डीबग करने के लिए समस्या निवारण .... यह प्राथमिक रूप से आपके द्वारा वांछित प्राथमिक जानकारी नहीं होने के लिए बढ़ रहा है। खेतों के पहले मुट्ठी के भीतर देखें,

मैंने अक्सर सोचा था कि मैं ऐसा कर सकता हूं, इस सटीक कारण के लिए। लेकिन एसक्यूएल क्या करता है, इसकी कमी है, एक नई तालिका के लिए एक स्क्रिप्ट बनाएँ, जिस तरह से मैं चाहता हूं, उसे सम्मिलित करें, फिर मौजूदा तालिका से सभी मौजूदा बाधाओं, रिश्तों, चाबियों, सूचकांक, आदि को छोड़ देना और नाम बदलना। "नया" तालिका पुराने नाम पर वापस, और फिर उन सभी कुंजियों, रिश्तों, सूचकांक, आदि आदि को पढ़कर ...।

केवल थकाऊ, समय लेने वाली नहीं है ... लेकिन पांच और वर्षों में, फिर से होने की आवश्यकता होगी ...।

यह इतनी बड़ी मात्रा में काम करने के लायक है, हालाँकि बात यह है ... यह आखिरी बार नहीं होगा जब हमें इस क्षमता की आवश्यकता होगी, क्योंकि हमारे सिस्टम को एक विकसित क्रम में विकसित, विस्तारित, और फ़ील्ड प्राप्त करना जारी रहेगा। जरूरत / डिजाइन परिवर्धन।

अधिकांश डेवलपर्स एकल प्रणाली के दृष्टिकोण से सोचते हैं जो एकल कंपनी या बहुत विशिष्ट हार्ड बॉक्स बाजार में कार्य करता है।

"ऑफ-द-शेल्फ" लेकिन महत्वपूर्ण रूप से प्रगतिशील डिजाइनर और उनके मार्केट स्पेस में विकास के नेताओं को हमेशा इस समस्या से निपटना होगा, अगर किसी के पास एक है, तो रचनात्मक समाधान पसंद करेंगे। यह आसानी से एक सप्ताह में मेरी कंपनी को एक दर्जन घंटे बचा सकता है, बस स्क्रॉल करने के लिए नहीं, या याद रखें कि "जहां" स्रोत डेटा टेबल में फ़ील्ड है ...।


हमारे पास एक ही मुद्दा था और एक संग्रहीत प्रक्रिया बनाई गई जो इस प्रक्रिया को स्वचालित करती है (नाम बदलें, नई तालिका बनाएं, कॉपी करें, सभी विदेशी कुंजियों, बाधाओं, आदि को पुन: बनाएँ)। आपको केवल टैब्लेमनाम और कॉलम के नए क्रम में पास होना होगा। यदि यह वास्तव में आपकी कंपनी को सप्ताह में दर्जनों घंटे बचा सकता है, तो आपको एक समान स्क्रिप्ट लिखने का समय निवेश करना चाहिए। हमारे लिए, एक स्थिर स्क्रिप्ट के लिए केवल 2-3 दिनों का समय लगता था जिसे हम नियमित रूप से स्तंभों को पुन: क्रमबद्ध करने के लिए उपयोग करते हैं। यह उन सभी विशेषताओं का ध्यान रखता है जो हम SqlServer में उपयोग करते हैं (जैसे आंशिक अनुक्रमित, अनुक्रमित विचार, आदि) और केवल लगभग 400 LOC के होते हैं।
एंड्रियास

मुझे नहीं पता कि वे किसी तरह कॉलम लेआउट को दूर क्यों नहीं कर सकते। यह स्तंभों को भौतिक रूप से पुनः व्यवस्थित करने के लिए नहीं है! Sql सर्वर में PHD स्तर और इंजीनियरिंग से परे की मात्रा वास्तव में आश्चर्यजनक है। जब आप क्वेरी प्लान जेनरेशन की जटिलता पर विचार करते हैं, तो आँकड़े, इंडेक्सिंग और कोई भी अभी तक खड़ा नहीं होता है और कहा जाता है कि 'केवल लॉजिकल ऑर्डर का प्रतिनिधित्व करने वाली तालिका बनाते हैं। FieldID Guid, OrderBy int। किया हुआ। फिर SSMS या SELECT *उस का उपयोग करता है। यदि आप एक पूर्ण DBA हैं और इसे नहीं चाहते हैं तो इसे बंद कर दें। अधिक निराश। और अब मेरी मेजें इतनी बड़ी हैं कि मैं इसे और बल नहीं दे सकता।
साइमन_वेर

मुझे पता है कि यह एक पुरानी टिप्पणी है, लेकिन डेटाबेस प्रोजेक्ट के भीतर विजुअल स्टूडियो स्वचालित रूप से भौतिक कॉलम रिकॉर्डर के लिए एसक्यूएल स्क्रिप्ट बनाते हैं जब आप तालिका के स्कीमा को बदलते हैं और प्रकाशित करते हैं।
मुफ्लिक्स

5

यदि मैं आपके प्रश्न को समझता हूं, तो आप प्रभावित करना चाहते हैं कि मौजूदा प्रश्नों में कौन सा कॉलम पहले, दूसरे, तीसरे, आदि पर लौटाया जाता है ?

यदि आपके सभी प्रश्नों के साथ लिखा गया है SELECT * FROM TABLE- तो वे आउटपुट में दिखाएंगे क्योंकि वे SQL में रखे गए हैं।

यदि आपके प्रश्नों के साथ लिखा गया है SELECT Field1, Field2 FROM TABLE- तो SQL में उन्हें जो आदेश दिया गया है, वह कोई मायने नहीं रखता है।


3

जब प्रबंधन स्टूडियो ऐसा करता है, तो यह एक अस्थायी तालिका बना रहा है, जो कि सब कुछ कॉपी कर रहा है, अपनी मूल तालिका को छोड़ रहा है और अस्थायी तालिका का नाम बदल रहा है। कोई साधारण समकक्ष T-SQL कथन नहीं है।

यदि आप ऐसा नहीं कर रहे हैं, तो आप हमेशा उस क्रम में स्तंभों के साथ तालिका का एक दृश्य बना सकते हैं जिसे आप पसंद करेंगे और उसका उपयोग करेंगे?

संपादित करें: पीटा!


1

एक ही रास्ता है, लेकिन यह केवल अस्थायी रूप से क्वेरी के लिए ही है। उदाहरण के लिए,

कहते हैं कि आपके पास 5 टेबल हैं। टेबल कहा जाता हैT_Testing

FirstName, LastName, PhoneNumber, Email, और Member_ID

आप चाहते हैं कि यह उनकी आईडी, फिर अंतिम नाम, फिर पहले नाम, फिर फोन और फिर ईमेल को सूचीबद्ध करे।

आप इसे सेलेक्ट के अनुसार कर सकते हैं।

Select Member_ID, LastName, FirstName, PhoneNumber, Email
From T_Testing

इसके अलावा, यदि आप चाहते हैं कि लास्टनाम किसी कारण से पहले नाम से पहले दिखाए, तो आप इसे निम्नानुसार भी कर सकते हैं:

Select LastName, *
From T_Testing

केवल एक चीज जिसे आप सुनिश्चित करना चाहते हैं कि आप ऐसा करते हैं कि ऑर्डरबाय या जहां फ़ंक्शन को तालिका के रूप में निरूपित करने की आवश्यकता है। यदि आप कहां या ऑर्डरबाय का उपयोग करने जा रहे हैं, तो कॉलम टाइप करें।

उदाहरण:

Select LastName, *
From T_Testing
Order By T_Testing.LastName Desc

मुझे उम्मीद है कि यह मदद करता है, मैंने इसे समझ लिया क्योंकि मुझे खुद ऐसा करने की जरूरत थी।


इस क्वेरी में LastName का चयन करें, * T_Testing से, आपको LastName दो बार मिलता है।
sqluser

1
  1. क्वेरी विंडो में अपनी मौजूदा तालिका को स्क्रिप्ट करें।
  2. इस स्क्रिप्ट को एक परीक्षण डेटाबेस के विरुद्ध चलाएँ (उपयोग विवरण निकालें)
  3. अपनी आवश्यकता के कॉलम में बदलाव करने के लिए SSMS का उपयोग करें
  4. जनरेट चेंज स्क्रिप्ट पर क्लिक करें (डिफ़ॉल्ट रूप से बटनबार पर सबसे और नीचे की ओर दिए गए आइकन)
  5. अपनी वास्तविक तालिका के विरुद्ध इस स्क्रिप्ट का उपयोग करें

सभी स्क्रिप्ट वास्तव में वांछित स्तंभ आदेशों के साथ एक दूसरी तालिका तालिका बनाती है, आपके सभी डेटा को इसमें कॉपी करती है, मूल तालिका को गिराती है और फिर इसकी जगह लेने के लिए द्वितीयक तालिका का नाम बदल देती है। यह आपको इसे स्वयं लिखने से बचाता है, हालांकि आपको एक तैनात स्क्रिप्ट चाहिए।


0

यह सिस्टम तालिकाओं को सीधे संशोधित करके, SQL का उपयोग करके किया जा सकता है। उदाहरण के लिए, यहां देखें:

ऑल्टर टेबल - बीच में नया कॉलम जोड़ें

हालांकि, मैं सिस्टम टेबल के साथ खेलने की सलाह नहीं दूंगा, जब तक कि यह बिल्कुल आवश्यक न हो।


0

संपूर्ण तालिका को फिर से बनाए बिना स्तंभों के क्रम को बदलना संभव नहीं है। यदि आपके पास केवल डेटाबेस के कुछ उदाहरण हैं, तो आप इसके लिए SSMS का उपयोग कर सकते हैं (तालिका का चयन करें और "डिज़ाइन" पर क्लिक करें)।

यदि आपके पास मैन्युअल प्रक्रिया के लिए बहुत अधिक उदाहरण हैं, तो आपको इस स्क्रिप्ट को आज़माना चाहिए: https://github.com/Epaminaidos/reorder-columns

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.