SSMS तालिका के शीर्ष पर नई पंक्तियाँ क्यों नहीं डाल रहा है नीचे नहीं?


9

जब भी मैं मैन्युअल रूप से SQL सर्वर प्रबंधन स्टूडियो 2008 (डेटाबेस SQL ​​Server 2005 है) में एक तालिका में एक पंक्ति सम्मिलित करता हूं तो मेरी नई पंक्ति नीचे के बजाय सूची के शीर्ष पर दिखाई देती है।मैं पहचान स्तंभों का उपयोग कर रहा हूं और इसके परिणामस्वरूप चीजें होती हैं

id row
42 first row
1 second row
2 third row

जब पंक्तियों को लाया जाता है और स्पष्ट रूप से आदेश नहीं दिया जाता है।जब वेब ऐप के लिए पंक्तियों को लाया जाता है और एक क्या बदलता है, तो यह एक अलग रूप में दिखाई देता हैTOP 1क्वेरी लौटाता है।

मुझे पता है, मैं कर सकता हुorder byउन्हें, लेकिन ऐसा क्यों हो रहा है?मेरा अधिकांश डेटा एक वेब एप्लिकेशन के माध्यम से डाला गया है, इस एप्लिकेशन के सभी इंसर्ट फ़र्स्ट इन फ़र्स्ट आउट ऑर्डरिंग में डाले गए हैं, जैसे लेटेस्ट इंसर्ट सबसे नीचे है, इसलिए आईडी सभी एक पंक्ति में हैं।क्या सर्वर या मैनेजमेंट स्टूडियो में कुछ सेटिंग है जो इस अनुचित ऑर्डर का कारण बनती है?

  0

जैसा कि मैंने कभी-कभी देखा है, यह पीके के आदेश पर निर्भर करता है कि पंक्तियों को कैसे प्रदर्शित किया जाता है, यदि आप एक तालिका का चयन करते हैं।यदि आप कुछ जोड़ बनाते हैं, तो यह अन्य तालिकाओं पीके, एफके और इंडेक्स के आधार पर बदल सकता है ... 18 jul. 132013-07-18 22:00:36

  0

[मेरी-गो-राउंड] (http://technet.microsoft.com/en-us/library/ms191475%28v=sql.105%29.aspx) स्कैन से भी अवगत रहें। 01 apr. 152015-04-01 03:49:03

17

SQL दुनिया में, ऑर्डर डेटा के एक सेट की एक अंतर्निहित संपत्ति नहीं है।इस प्रकार, आपको अपने RDBMS से कोई गारंटी नहीं मिलती है कि आपका डेटा एक निश्चित क्रम में वापस आ जाएगा - या यहां तक ​​कि एक सुसंगत क्रम में - जब तक आप ORDER BY क्लाज के साथ अपने डेटा को क्वेरी नहीं करते।

Craig Freedman :

ORDER BY के साथ शीर्ष संयोजन संयुक्त पंक्तियों के सेट में नियतिवाद जोड़ता है।आदेश के बिना, लौटी पंक्तियों का सेट क्वेरी योजना पर निर्भर करता है और निष्पादन से निष्पादन तक भी भिन्न हो सकता है।

यदि आप अपने परिणाम सेट में अच्छी तरह से परिभाषित और सुसंगत क्रम की अपेक्षा करते हैं तो हमेशा ORDER BY उपयोग करें।अपने प्रश्नों में डेटा के एक निश्चित क्रम की गारंटी के लिए डिस्क पर पंक्तियों को कैसे संग्रहीत किया जा सकता है (जैसे एक संकुल सूचकांक के माध्यम से) पर कभी भरोसा न करें।


0

यह इसलिए है क्योंकि तालिका एक ढेर तालिका (सबसे अधिक संभावना है) और अनुक्रमित नहीं है।आईडी कॉलम को PRIMARY KEY और साथ ही IDENTITY ।एसक्यूएल सर्वर शारीरिक रूप से इंडेक्स के आधार पर डेटा को स्टोर करता है - उदाहरण के लिए, यदि आईडी एक क्लस्टर इंडेक्स (जैसे कि प्राथमिक कुंजी) है तो डेटा को आईडी के क्रम में भौतिक रूप से संग्रहीत किया जाएगा और बिना क्वेरी के भी उस तरह से वापस किया जाएगा ORDER BY खंड।अन्यथा, पंक्तियों का क्रम डेटाबेस के लिए महत्वपूर्ण नहीं है।नतीजतन, एक आवेदन का होना डेटाबेस में पंक्तियों के क्रम पर निर्भर करता है (और साथ ही साथ एक निश्चित क्रम में होने के आधार पर) एक अच्छा अभ्यास नहीं है।एप्लिकेशन को पंक्तियों की पहचान करने के लिए डेटाबेस में जो भी चाबियाँ हैं, उनके साथ काम करने की आवश्यकता है।

  0

जानकार अच्छा लगा।मुझे पता था कि यह 'ऑर्डर बाय' (यह एक विरासत वाला ऐप है जो बहुत बुरे व्यवहार वाला है) का उपयोग करने के लिए ऐप को बदलने के लिए एक संकेत था लेकिन मैं सोच रहा था कि ऐसा क्यों हुआ। 14 sep. 112011-09-14 19:49:38

+4

तालिका की संरचना को केवल इतना बदलें कि 'का चयन करें' 'बिना आज्ञा के' द्वारा BY' *** *** "सही" क्रम में वापस आ सकता है (लेकिन अभी भी गारंटी नहीं है)? 14 sep. 112011-09-14 20:22:26

  0

क्लस्टर इंडेक्स वाली टेबल से एक सिलेक्ट सिलेक्ट पर, क्लस्टर्ड इंडेक्स के क्रम में वापस आ जाएगा।जैसा कि मुझे स्पष्ट नहीं होना चाहिए था कि यह एक चित्रण था जब किसी विशेष स्तंभ द्वारा भौतिक रूप से डेटा का आदेश दिया जाता है, लेकिन यह निश्चित रूप से नहीं दिया गया है कि प्रत्येक प्रश्न में इसे सही ढंग से वापस किया जाएगा।मैया पापा। 14 sep. 112011-09-14 20:27:39

+4

यह वास्तव में कोई फर्क नहीं पड़ता कि क्लस्टर इंडेक्स क्या है।SQL सर्वर अभी भी कई अन्य कारकों के आधार पर कुछ अन्य सूचकांक के आधार पर ऑर्डर वापस कर सकता है।कुछ कॉलम पर एक प्राथमिक कुंजी बनाना *** नहीं *** *** गारंटी देता है कि बिना किसी क्रम के चयन से अचानक उस कॉलम द्वारा हमेशा वापस आ जाएगा।क्या आप उस समय का निरीक्षण कर सकते हैं?ज़रूर।लेकिन यह गारंटी के समान नहीं है।मैंने अपनी सड़क पर कभी ध्रुवीय भालू नहीं देखा है लेकिन कोई ध्रुवीय भालू बल क्षेत्र नहीं है जो इसे होने से रोकता है। 14 sep. 112011-09-14 20:41:09

+3

वैसे भी मेरा कहना यह था कि तालिका में स्कीमा परिवर्तन करने और * उम्मीद * करने की तुलना में 'ORDER BY' क्लॉज़ को जोड़ना एक बहुत बेहतर गारंटी है (कभी भी बहुत कम विघटनकारी नहीं है) कि ऑर्डर करना हमेशा की तरह होगा। 14 sep. 112011-09-14 20:42:25


10

बस अन्य उत्तरों को बढ़ाने के लिए: एक तालिका, परिभाषा के अनुसार, पंक्तियों का एक अनियंत्रित सेट है।यदि आप एक ORDER BY क्लाज निर्दिष्ट नहीं करते हैं, तो SQL सर्वर उन पंक्तियों को वापस करने के लिए स्वतंत्र है जिस क्रम में वह सबसे अधिक कुशल है।यह अक्सर डालने के क्रम के साथ मेल खाने के लिए होता है, क्योंकि अधिकांश तालिकाओं में पहचान, डेटाटाइम या अन्य मोनोटोनॉमिक रूप से बढ़ते स्तंभों पर एक क्लस्टर इंडेक्स होता है, लेकिन आपको इसे ठीक उसी तरह से व्यवहार करना चाहिए: एक संयोग।यह नए डेटा के साथ बदल सकता है, एक आँकड़े अपडेट, एक ट्रेस ध्वज, मैक्सडॉप में परिवर्तन, क्वेरी संकेत, जुड़ने के लिए परिवर्तन या जहां क्वेरी में क्लॉस, सर्विस पैक/संचयी अद्यतन/हॉटफ़िक्स/अपग्रेड के कारण ऑप्टिमाइज़र में परिवर्तन डेटाबेस को अलग सर्वर पर ले जाना, आदि।

दूसरे शब्दों में, और मुझे पता है कि आप पहले से ही जवाब जानते हैं, लेकिन यह पर्याप्त नहीं कहा जा सकता है:

यदि आप किसी क्वेरी के आदेश पर भरोसा करना चाहते हैं, तो हमेशा जोड़ेंORDER BY

  0

मैं आदेश के आधार पर योजना नहीं बना रहा था, लेकिन नेत्रहीन यह थोड़ा कष्टप्रद है कि मेरे पिछले सम्मिलित आइटम अचानक शीर्ष पर हैं। 14 sep. 112011-09-14 20:18:15

  0

मुझे लगता है कि यह इसलिए है क्योंकि आप ओपन टेबल का उपयोग कर रहे हैं।प्रबंधन स्टूडियो 2008 में इस कमांड को "एड टॉप टॉप पंक्तियाँ" और "टॉप एन पंक्तियों का चयन करें" में बदल दिया गया है - जब आप बाद वाले को चुनते हैं, तो आप परिणामी क्वेरी को संपादित करने के लिए स्वतंत्र हैं, जैसे शीर्ष को हटा दें और एक ऑर्डर जोड़ें। 14 sep. 112011-09-14 20:21:07

  0

यह प्रबंधन स्टूडियो 2008 है, सर्वर 2005 है, स्पष्ट होना चाहिए था।मुझे नहीं पता था कि एक "ओपन टेबल" कमांड थी, मैंने हमेशा 'सेलेक्ट' स्टेटमेंट्स का उपयोग किया है 14 sep. 112011-09-14 20:36:30

+4

ठीक है, अच्छी तरह से बिंदु अभी भी खड़ा है, मैं समझता हूं कि यह कष्टप्रद है कि डेटा एक ऐसे क्रम में वापस आता है जिसकी आपको उम्मीद नहीं है, लेकिन मुझे उम्मीद है कि अब SQL सर्वर वास्तव में परवाह नहीं करता है कि आप क्या आदेश देते हैं * जब तक आप * यह नहीं बताते हैं कि आप खंड द्वारा एक आदेश जोड़कर देखभाल करते हैं।:-) 14 sep. 112011-09-14 20:37:35