क्या कोई मूल्य है जो मैं एक चयन शीर्ष में उपयोग कर सकता हूं जो सभी पंक्तियों को वापस कर देगा?


13

मैं अंतिम उपयोगकर्ता को यह परिभाषित करने की अनुमति दे रहा हूं कि किसी क्वेरी (SELECT TOP (@x)) द्वारा कितनी पंक्तियाँ लौटा दी गई हैं। क्या कोई मूल्य है जो दर्ज किया जा सकता है जहां सभी पंक्तियां वापस आ जाती हैं? या क्या मुझे गतिशील रूप से TOP (@x) के बिना क्वेरी बनाना है अगर वे सभी पंक्तियों को वापस चाहते हैं?

मैं SQL Server 2012 का उपयोग कर रहा हूं।


यह TOP ... ORDER BYकुछ है? क्या ORDER BYमामले में अभी भी कुछ आवश्यक है जिसे आप सभी का चयन करते हैं?
मार्टिन स्मिथ

1
मुझे लगता है कि उह ... बस TOPसवाल से बाहर है? जैसे आप कुछ पूर्वनिर्धारित क्वेरी के साथ काम कर रहे हैं और आपको इसे कुछ पास करना है ?
corsiKa

जवाबों:


17

यदि आप PERCENT का उपयोग नहीं कर रहे हैं , तो ऐसा लगता है कि TOP एक BIGINT है । इसका मतलब है कि आप BIGINT के अधिकतम मूल्य में पास हो सकते हैं ,

SELECT TOP (9223372036854775807) * FROM table1

मुझे गंभीरता से संदेह है कि आप कभी भी एक तालिका देखेंगे जो बड़ी है। मुझे यकीन नहीं है कि क्वेरी योजना पर किस तरह का प्रभाव पड़ेगा।


7
मान लिया जाए कि चर @xएक बड़ा है तो SET @x = 0x7fffffffffffffffकुछ के लिए स्पष्ट हो सकता है। वैसे भी याद रखना आसान है।
मार्टिन स्मिथ

@MartinSmith मैं ईमानदार हूँ मैं इसे किसी भी तरह से देखने जा रहा हूँ :) मैंने ऐसा पहले कभी नहीं देखा है। क्या इसका कोई निहितार्थ है?
केनेथ फिशर

7
वैसे यह याद रखना आसान है कि क्या आपको सिर्फ शुरुआत करना याद है 7और फिर बाकी चीजें हैं Fऔर आपको 8 बाइट्स के लिए कुल 16 कैरेक्टर चाहिए। और हाँ, यह उस डेटाटाइप के एक वैरिएबल को असाइन करने पर इसे बदल दिया जाएगा।
मार्टिन स्मिथ

@MartinSmith क्या मूल्य के द्विआधारी प्रतिनिधित्व पर भरोसा करना एक अच्छा अभ्यास है? प्रलेखन राज्यों एक मूल्य के द्विआधारी प्रतिनिधित्व SQL सर्वर के संस्करण के लिए संस्करण से बदल सकता है । इसके अलावा, मुझे नहीं पता कि क्या मैं अकेला व्यक्ति हूं, जो हमेशा SqlServer 0x7fffffffffffffffके अधिकतम मूल्य के प्रतिनिधित्व से भ्रमित था bigint। कारण SqlServer द्विआधारी निरंतर अंकन में आप हैं, वे है 7fमें सबसे कम बाइट, सी जैसी भाषाओं ++ में होता है आप इसे में है जहां सबसे अधिक बाइट हस्ताक्षर किए अभिन्न प्रकार की अधिकतम प्राप्त करने के लिए।
i- एक

3
@ मैं एक। पूर्णांक प्रकारों के द्विआधारी प्रतिनिधित्व को बदलने की बहुत संभावना नहीं है। SQL सर्वर में बिटवॉइन ऑपरेटरों की आपूर्ति का कोई मतलब नहीं होगा जो पूर्णांक प्रकारों पर काम करते हैं यदि यह उम्मीद नहीं थी कि हम एक विशिष्ट प्रारूप पर भरोसा कर सकते हैं।
मार्टिन स्मिथ

12

आप भी विचार कर सकते हैं

SET ROWCOUNT @x;

SELECT Foo
FROM Bar
ORDER BY Baz;

के बजाय

SELECT TOP (@x) Foo
FROM Bar 
ORDER BY Baz;

आपको 0इसे अक्षम करने के लिए @x को सेट करने के लिए मान की आवश्यकता होगी ।

यह डेटा संशोधन विवरणों के लिए पदावनत है, लेकिन इसके लिए पदावनत नहीं किया जाता है SELECT

2012 में एक अलग योजना उस मामले के लिए संकलित की जाती है जो ROWCOUNT0 बनाम कुछ गैर शून्य मूल्य है।

यदि परिणामों के लिए एक प्रस्तुति आदेश प्रदान ORDER BY Bazकरने के TOPबजाय केवल अर्थ देने के लिए है और आपके पास इसका समर्थन करने वाला कोई सूचकांक नहीं है, तो दो प्रश्नों में विभाजित होने से 0मामले में एक अनावश्यक प्रकार से बचना होगा ।


8

Select TOP 100 PERCENT का उपयोग किसी भी त्रुटि को "TOP" के साथ क्वेरी में बायपास करने के लिए किया जा सकता है।


1
मेरे लिए, यह वास्तव में एक ऐसी सुविधा का उपयोग करने का कारण नहीं बताता है जो अनुकूलित हो जाती है। क्या क्रिस्टल रिपोर्टें एक ORDER BY की परिभाषा की परिभाषा में होने की उम्मीद करती हैं?
एंड्री एम

नहीं, क्रिस्टल रिपोर्ट में प्रश्नों को पकड़ने और उन पर अपनी स्वयं की निष्पादन योजनाओं को मजबूर करने, उन्हें बहुत अक्षम और कभी-कभी गलत बनाने के साथ समस्याएँ हैं। मैं अपने सभी तर्क और डिज़ाइन को SQL क्वेरी में करना पसंद करता हूं, और बस इसे क्रिस्टल में "सुंदर" बनाता हूं। यही कारण है कि मेरे पास, अधिकांश भाग के लिए, एसएसआईएस / एसएसआरएस के लिए माइग्रेट किया गया है, लेकिन वहां अभी भी विरासत की रिपोर्टें हैं।
मुगेरत्रोरेस

-2
select top(SELECT COUNT(*) FROM YourTable) * From YourTable

1
सवाल टॉप क्लॉज के पैरामीट्राइजिंग के बारे में है । ओपी के पास पहले से ही एक पैरामीटर ( @x) है, और वे अब पूछ रहे हैं कि किस मूल्य को पास करना है @xताकि इसका मतलब "सभी पंक्तियों" से हो, चाहे मेज वास्तव में कितनी पंक्तियों की हो। शायद आप यह जान सकते हैं कि ओपी की आवश्यकताओं के अनुरूप अपने समाधान को कैसे अनुकूलित किया जाए।
एंड्री एम

1
मैंने प्रश्न को फिट करने के लिए समायोजन किया है, हालांकि लिखा है कि यह एक दौड़ की स्थिति है अगर पंक्तियों को समवर्ती रूप से डाला जाता है। यह समवर्ती आवेषण को ब्लॉक करने की अवधि के लिए तालिका लॉक की आवश्यकता होगी। यह और पहली जगह में जाँच के अतिरिक्त खर्च को एक बड़ी संख्या का उपयोग करके टाला जा सकता है।
मार्टिन स्मिथ

(SELECT COUNT(*) FROM YourTable)कोई मूल्य नहीं है।
ypercube y
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.