2008-08-04 17 views
73

यदि मैं माइक्रोसॉफ्ट एसक्यूएल सर्वर में किसी तालिका में कॉलम जोड़ रहा हूं, तो क्या मैं क्वेरी में तर्कसंगत रूप से कॉलम कहां प्रदर्शित कर सकता हूं?क्या मैं तर्कसंगत रूप से तालिका में स्तंभों को पुन: व्यवस्थित कर सकता हूं?

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

मुझे पता है कि मैं तालिकाओं के लिए अपने "डिजाइन" मोड में जाने और चारों ओर कॉलम के क्रम खींचकर एसक्यूएल प्रबंधन स्टूडियो के माध्यम से ऐसा कर सकते हैं, लेकिन मैं इतना है कि कच्चे एसक्यूएल में यह करने के लिए सक्षम होने के लिए करना चाहते हैं मैं कमांड लाइन से लिखित ऑर्डरिंग कर सकते हैं।

+0

लेकिन इस कड़ी पर एक नजर है:

मामले में आप एक मैनुअल प्रक्रिया के लिए भी कई मामले हैं तो आप इस स्क्रिप्ट की कोशिश करनी चाहिए। http://blog.sqlauthority.com/2013/03/11/sql-server-how-to-add-column-at- विशिष्ट- स्थान-in-table/ – sqluser

+0

यह भी देखें http://stackoverflow.com/questions/4402312/क्यों-cant-i-reorder-my-sql-server-column और http://stackoverflow.com/questions/5327545/adding-column-between-two-other-columns-in-sql-server –

+0

और अधिक संबंधित चीजें: http://stackoverflow.com/questions/34818/sql-server-does-column-order-matter और http://dba.stackexchange.com/questions/18719/does-the-order-of-columns -इन-ए-टेबल-परिभाषा-पदार्थ –

उत्तर

61

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

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

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

1

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

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

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

5

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

यदि आपके सभी प्रश्न चयन * से तालिका के साथ लिखे गए हैं - तो वे आउटपुट में दिखाए जाएंगे क्योंकि वे SQL में डाले गए हैं। यदि आपके प्रश्न SELECT Field1, तालिका से फ़ील्ड 2 के साथ लिखे गए हैं - तो SQL में दिए गए क्रम से कोई फर्क नहीं पड़ता।

1

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

Alter table - Add new column in between

हालांकि, मैं प्रणाली तालिकाओं के साथ खेल की सिफारिश नहीं होगा, जब तक यह बिल्कुल जरूरी है।

35

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

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

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

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

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

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

+0

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

1

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

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

प्रथम नाम, अंतिम नाम, फ़ोन नंबर, ईमेल, और Member_ID

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

आप इसे चयन के अनुसार कर सकते हैं।

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

उसके अलावा, अगर आप सिर्फ अंतिम नाम चाहते किसी कारण से पहले नाम से पहले दिखाने के लिए, आप इसे भी इस रूप में कर सकते हैं:

Select LastName, * 
From T_Testing 

केवल एक चीज आप करना चाहते हैं सुनिश्चित हो कि आप करना है कि OrderBy या कहाँ समारोह यदि आप एक कहाँ या OrderBy

उदाहरण का उपयोग किया जा रहे हैं Table.Column के रूप में निरूपित किया जाना चाहिए:

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

मुझे आशा है कि इससे मदद मिलेगी, मैंने इसे समझ लिया क्योंकि मुझे इसे स्वयं करने की ज़रूरत थी।

+0

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

1
  1. अपनी मौजूदा तालिका को एक क्वेरी विंडो में स्क्रिप्ट करें।
  2. भागो टेस्ट डेटाबेस के खिलाफ इस स्क्रिप्ट स्तंभ में परिवर्तन की जरूरत है
  3. क्लिक करें उत्पन्न बदलें स्क्रिप्ट बनाने के लिए
  4. उपयोग SSMS (प्रयोग बयान निकालने के लिए) (बाएं सबसे और सब से नीचा buttonbar पर आइकन, डिफ़ॉल्ट रूप से)
  5. अपने वास्तविक तालिका के खिलाफ इस स्क्रिप्ट का उपयोग करें

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

0

संपूर्ण तालिका को पुनर्निर्माण किए बिना कॉलम के क्रम को बदलना संभव नहीं है। यदि आपके पास केवल डेटाबेस के कुछ उदाहरण हैं, तो आप इसके लिए एसएसएमएस का उपयोग कर सकते हैं (तालिका का चयन करें और "डिज़ाइन" पर क्लिक करें)। एक जवाब के लिए बहुत देर हो गई https://github.com/Epaminaidos/reorder-columns

संबंधित मुद्दे

 संबंधित मुद्दे