दिलचस्प पोस्ट
mongodb.conf bind_ip = 127.0.0.1 काम नहीं करता है लेकिन 0.0.0.0 काम करता है निर्धारित करें कि वर्तमान अनुप्रयोग सक्रिय है (फोकस है) रेल: आंशिक रूप से स्थानीय लोगों को पारित करने के लिए वाक्यविन्यास के बारे में भ्रमित ड्रॉपडाउन सूची को प्रोग्रामेटिक रूप से सेट करना अजगर में opencv का उपयोग करके छवि क्षेत्र की प्रतिलिपि कैसे करें? जावास्क्रिप्ट: विंडो को कैसे रोकें। स्थान परिवर्तन जावा कोड से बाहरी जावास्क्रिप्ट कार्यों को कॉल करें ASP.NET एमवीसी – रीडायरेक्ट टीओएक्शन में मॉडलस्टेट की त्रुटियां कैसे सुरक्षित रखी जाती हैं? + = में सी और सी ++ का नतीजा क्या है? पढ़ने के लिए पायथन रीडलाइन () उपयोग और कुशल अभ्यास बूटस्ट्रैप: मोडल में एक और मॉडल खोलें मोनोस्टेट बनाम सिंगलटन सी # HttpWebRequest प्रकार "अनुप्रयोग / x-www-form-urlencoded" – कैसे सामग्री निकाय में 'और' चरित्र भेजने के लिए? डिवाइस के रिबूट के बाद एंड्रॉइड ब्रॉडकास्ट रिसीवर, ऑटो रन सर्विस रेगेक्स सड़क पता मैच

लिमिट 10..20 SQL सर्वर में

मैं ऐसा करने की कोशिश कर रहा हूं:

SELECT * FROM table LIMIT 10,20 

या

 SELECT * FROM table LIMIT 10 OFFSET 10 

लेकिन SQL सर्वर का उपयोग करते हुए

मैंने पाया एकमात्र समाधान ओवरकिल की तरह लग रहा है:

 SELECT * FROM ( SELECT *, ROW_NUMBER() OVER (ORDER BY name) as row FROM sys.databases ) a WHERE row > 5 and row <= 10 

मुझे यह भी मिला :

 SELECT TOP 10 * FROM stuff; 

… लेकिन यह नहीं है कि मैं क्या करना चाहता हूं क्योंकि मैं प्रारंभिक सीमा निर्दिष्ट नहीं कर सकता

क्या मुझे ऐसा करने के लिए एक और तरीका है?

इसके अलावा, बस उत्सुक है, वहाँ एक कारण है क्यों नहीं SQL सर्वर LIMIT समारोह या कुछ इसी तरह का समर्थन करता है? मैं मतलब नहीं होना चाहता, लेकिन यह वास्तव में एक डीबीएमएस की जरूरत की तरह लग रहा है … अगर ऐसा होता है, तो मुझे बहुत अज्ञानी होने के लिए क्षमा करें! मैं पिछले 5 सालों से MySQL और SQL + के साथ काम कर रहा हूं …

Solutions Collecting From Web of "लिमिट 10..20 SQL सर्वर में"

LIMIT मानक एसक्यूएल का हिस्सा नहीं है यह MySQL, PostgreSQL, और SQLite द्वारा एसक्यूएल के लिए एक विक्रेता विस्तार के रूप में समर्थित है।

डेटाबेस के अन्य ब्रांडों में ऐसी ही विशेषताएं हो सकती हैं (जैसे कि माइक्रोसॉफ्ट SQL सर्वर में शीर्ष), लेकिन ये हमेशा समान रूप से काम नहीं करते हैं।

LIMIT नकल की नकल करने के लिए माइक्रोसॉफ्ट एसक्यूएल सर्वर में TOP का इस्तेमाल करना मुश्किल है। ऐसे मामलों हैं जहां यह काम नहीं करता है।

आपके द्वारा दिखाया गया समाधान, ROW_NUMBER() का उपयोग माइक्रोसॉफ्ट SQL सर्वर 2005 और बाद में उपलब्ध है। यह सबसे अच्छा समाधान है (अभी के लिए) जो क्वेरी का एक भाग के रूप में पूरी तरह काम करता है।

एक अन्य समाधान पहली गणना + ऑफसेट पंक्तियों को प्राप्त करने के लिए TOP का उपयोग करने के लिए है, और फिर पहली ऑफसेट पंक्तियों से पिछली तलाश करने के लिए एपीआई का उपयोग करें

यह भी देखें:

  • " माइक्रोसॉफ्ट एसक्यूएल सर्वर 2000 में एमएसक्यूएल लिमिट क्लोन का अनुकरण "
  • " एएसपी.नेट में बड़े परिणाम के पेजिंग "

SQL सर्वर 2012 + के लिए आप उपयोग कर सकते हैं

 SELECT * FROM sys.databases ORDER BY name OFFSET 5 ROWS FETCH NEXT 5 ROWS ONLY 

जैसा कि आपने पाया, यह पसंदीदा एसक्यूएल सर्वर विधि है:

 SELECT * FROM ( SELECT *, ROW_NUMBER() OVER (ORDER BY name) as row FROM sys.databases ) a WHERE a.row > 5 and a.row <= 10 

यदि आप माउंटिन स्मिथ के उत्तर के लिए SQL Server 2012+ वोट का उपयोग कर रहे हैं और ORDER BY OFFSET और FETCH NEXT एक्सटेंशन का उपयोग करें,

यदि आप पहले के संस्करण के साथ फंस जाने के लिए पर्याप्त दुर्भाग्यपूर्ण हैं, तो आप ऐसा कुछ कर सकते हैं,

 WITH Rows AS ( SELECT ROW_NUMBER() OVER (ORDER BY [dbo].[SomeColumn]) [Row] , * FROM [dbo].[SomeTable] ) SELECT TOP 10 * FROM Rows WHERE Row > 10 

मुझे विश्वास है कि functionaly के बराबर है

 SELECT * FROM SomeTable LIMIT 10 OFFSET 10 ORDER BY SomeColumn 

और एमएस एसक्यूएल 2012 से पहले, टीएसक्यूएल में ऐसा करने का सबसे अच्छा प्रदर्शन करने वाला तरीका


यदि बहुत सी पंक्तियाँ हैं तो आपको सीटीई के बजाए अस्थायी तालिका का उपयोग करके बेहतर प्रदर्शन प्राप्त हो सकता है

दुर्भाग्य से, ROW_NUMBER() सबसे अच्छा है जो आप कर सकते हैं यह वास्तव में अधिक सही है, क्योंकि किसी limit या top खंड के परिणाम वास्तव में कुछ विशिष्ट आदेश के बिना अर्थ नहीं रखते हैं। लेकिन यह अभी भी एक दर्द है।

अपडेट: एसक्यूएल सर्वर 2012 ऑफसेट और एफईटेक कीवर्ड्स के माध्यम से एक limit -जैसी सुविधा जोड़ती है।

इस बारे में कैसा है?

 SET ROWCOUNT 10 SELECT TOP 20 * FROM sys.databases ORDER BY database_id DESC 

यह आपको पहले 20 पंक्तियों की अंतिम 10 पंक्तियां देता है एक दोष यह है कि आदेश उलट हो गया है, लेकिन कम से कम यह याद रखना आसान है।

एक प्रक्रिया बनाने के लिए एक अच्छा तरीका है:

 create proc pagination (@startfrom int ,@endto int) as SELECT * FROM ( SELECT *, ROW_NUMBER() OVER (ORDER BY name desc) as row FROM sys.databases ) a WHERE a.row > @startfrom and a.row <= @endto 

बस सीमा की तरह 0,2 ///////////// pagination 0,4 निष्पादित करें

बस रिकॉर्ड समाधान के लिए जो अधिकांश डेटाबेस इंजिन में काम करता है, हालांकि शायद सबसे ज्यादा कुशल न हो:

 Select Top (ReturnCount) * From ( Select Top (SkipCount + ReturnCount) * From SourceTable Order By ReverseSortCondition ) ReverseSorted Order By SortCondition 

पेल नोट: आखिरी पृष्ठ में अब भी रिक्त Count पंक्तियां होती रहेंगी चाहे SkipCount क्या हो। लेकिन कई मामलों में यह अच्छी बात हो सकती है

सीमा के समतुल्य है SET ROWCOUNT, लेकिन यदि आप जेनेरिक पृष्ठांकन चाहते हैं तो इस तरह से एक क्वेरी लिखना बेहतर है:

 ;WITH Results_CTE AS ( SELECT Col1, Col2, ..., ROW_NUMBER() OVER (ORDER BY SortCol1, SortCol2, ...) AS RowNum FROM Table WHERE <whatever> ) SELECT * FROM Results_CTE WHERE RowNum >= @Offset AND RowNum < @Offset + @Limit 
 SELECT TOP 10 * FROM TABLE WHERE IDCOLUMN NOT IN (SELECT TOP 10 IDCOLUMN FROM TABLE) 

रिकॉर्ड 11-20 देना चाहिए संभवत: बहुत अधिक कुशल नहीं है यदि आगे के पृष्ठों को प्राप्त करने के लिए बढ़ते हुए, और सुनिश्चित न हो कि यह आदेश देने से कैसे प्रभावित हो सकता है। इसे दोनों WHERE स्टेटमेंट्स में निर्दिष्ट करना पड़ सकता है

 select * from (select id,name,ROW_NUMBER() OVER (ORDER BY id asc) as row from tableName1) tbl1 where tbl1.row>=10 and tbl1.row<=15 

10 से 15 की पंक्तियों को प्रिंट करेंगे

अब तक यह प्रारूप मेरे लिए काम कर रहा है (हालांकि सर्वश्रेष्ठ प्रदर्शन नहीं है):

 SELECT TOP {desired amount of rows} * FROM (SELECT *, ROW_NUMBER() OVER (ORDER BY {order columns} asc)__row__ FROM {table})tmp WHERE __row__ > {offset row count} 

पक्ष पर एक नोट, गतिशील डेटा पर पगिंग अजीब / अप्रत्याशित परिणाम हो सकता है।

एमएस एसक्यूएल सर्वर ऑनलाइन प्रलेखन ( http://technet.microsoft.com/en-us/library/ms186734.aspx ) से, यहां उनका उदाहरण है कि मैंने एक विशिष्ट सेट पंक्तियों को पुनः प्राप्त करने के लिए परीक्षण और काम किया है। ROW_NUMBER को एक ओवर की आवश्यकता है, लेकिन आप जो भी चाहें उसे ऑर्डर कर सकते हैं:

 WITH OrderedOrders AS ( SELECT SalesOrderID, OrderDate, ROW_NUMBER() OVER (ORDER BY OrderDate) AS RowNumber FROM Sales.SalesOrderHeader ) SELECT SalesOrderID, OrderDate, RowNumber FROM OrderedOrders WHERE RowNumber BETWEEN 50 AND 60; 

सभी एसक्यूएल सर्वर का उपयोग करें: टीबीएल के रूप में (चयन करें ROW_NUMBER () से अधिक (क्रम 1 (चुनें 1)) के रूप में RowIndex, * तालिका से) * शीर्ष 10 * से tbl जहां RowIndex> = 10

  SELECT * FROM users WHERE Id Between 15 and 25 

यह 15 से 25 से प्रिंट करेगा जैसे कि मेरीएसक्यूएल में सीमा है