दिलचस्प पोस्ट
मैं "vcpu reg सिंक करने में विफल" त्रुटि कैसे ठीक करूं? दृश्य स्टूडियो के साथ जीसीसी? ट्विटर बूटस्ट्रैप फॉर्म फ़ाइल एलिमेंट अपलोड बटन Matlotlib में बार चार्ट्स के लिए समूह लेबल कैसे जोड़ें? आवेदन को संभालनेडिडबैकअक्टिव- "ऐप सक्रिय होने पर एक दृश्य नियंत्रक कैसे प्रतिक्रिया कर सकता है?" प्रॉक्सी के पीछे डॉकर छवियों को डाउनलोड नहीं किया जा सकता यह जाँचने का सबसे अच्छा तरीका क्या है कि कोई URL PHP में मौजूद है या नहीं? आईओएस में विंडोज प्रमाण पत्र के साथ सीओआरएस अनुरोध के लिए 401 प्रतिक्रिया Z- सूचकांक का उपयोग करके div को दूसरे div पर प्राप्त करें सबफ़ोल्डर से आयात मॉड्यूल मैं दो ArrayLists के बीच अंतर कैसे गणना करूं? अपाचे स्पार्क मूविंग एवरेज एक संग्रह में दस्तावेजों को एक उल्का क्लाइंट पर प्रकाशित करें, जो कि किसी अन्य दस्तावेज़ (प्रकाशित- के-संबंधों) में एक विशिष्ट दस्तावेज़ के अस्तित्व के आधार पर होता है। मैं कैसे एक WPF DataGrid paginate कर सकते हैं? कैसे "संदर्भित असेंबली में कोई मजबूत नाम नहीं है" त्रुटि को ठीक करने के लिए?

Microsoft SQL सर्वर के साथ LIMIT कैसे कार्यान्वित करें?

मेरे पास mysql के साथ यह प्रश्न है:

select * from table1 LIMIT 10,20 

माइक्रोसॉफ्ट एसक्यूएल के साथ मैं यह कैसे कर सकता हूं?

वेब के समाधान से एकत्रित समाधान "Microsoft SQL सर्वर के साथ LIMIT कैसे कार्यान्वित करें?"

एसक्यूएल सर्वर 2005 शुरू, आप ऐसा कर सकते हैं …

 USE AdventureWorks; GO WITH OrderedOrders AS ( SELECT SalesOrderID, OrderDate, ROW_NUMBER() OVER (ORDER BY OrderDate) AS 'RowNumber' FROM Sales.SalesOrderHeader ) SELECT * FROM OrderedOrders WHERE RowNumber BETWEEN 10 AND 20; 

या 2000 और निम्न संस्करणों के लिए ऐसा कुछ …

 SELECT TOP 10 * FROM (SELECT TOP 20 FROM Table ORDER BY Id) ORDER BY Id DESC 

क्लंकी, लेकिन यह काम करेगा

 SELECT TOP 10 * FROM table WHERE id NOT IN (SELECT TOP 10 id FROM table ORDER BY id) FROM table ORDER BY id 

एक सीमित सीमा का एमएसएसक्यूएलएल का अपराध अपराधी है, आईएमओ आपको इस प्रकार की क्लीजी वर्कअराउंड नहीं करना चाहिए

यह लगभग एक प्रश्न का एक डुप्लिकेट है जिसे मैंने अक्टूबर में पूछा था: माइक्रोसॉफ्ट एसक्यूएल सर्वर 2000 में एमुलेटर मायएसकॉएल लिमिट क्लॉज

यदि आप Microsoft SQL Server 2000 का उपयोग कर रहे हैं, तो कोई अच्छा समाधान नहीं है अधिकांश लोगों को एक अस्थायी तालिका में क्वेरी के परिणाम को एक IDENTITY प्राथमिक कुंजी के साथ कैप्चर करना IDENTITY । फिर प्राथमिक कुंजी कॉलम के खिलाफ एक शर्त शर्त का उपयोग कर क्वेरी करें।

यदि आप Microsoft SQL Server 2005 या बाद के संस्करण का उपयोग कर रहे हैं, तो आपके पास एक ROW_NUMBER() फ़ंक्शन है, इसलिए आप एक ही परिणाम प्राप्त कर सकते हैं, लेकिन अस्थायी तालिका से बचें

 SELECT t1.* FROM ( SELECT ROW_NUMBER OVER(ORDER BY id) AS row, t1.* FROM ( ...original SQL query... ) t1 ) t2 WHERE t2.row BETWEEN @offset+1 AND @offset+@count; 

आप इसे @Leon Tayson के जवाब में दिखाए गए सामान्य तालिका अभिव्यक्ति के रूप में भी लिख सकते हैं।

एसक्यूएल सर्वर 2012 के साथ शुरू, आप OFFSET FETCH खंड का उपयोग कर सकते हैं:

 USE AdventureWorks; GO SELECT SalesOrderID, OrderDate FROM Sales.SalesOrderHeader ORDER BY SalesOrderID OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY; GO 

http://msdn.microsoft.com/en-us/library/ms188385(v=sql.110).aspx

यह ठीक से काम नहीं कर सकता है जब ऑर्डर अनूठे नहीं है।

यदि क्वेरी को ऑर्डर डेट द्वारा ORDER में संशोधित किया गया है, तो परिणामस्वरूप लौटा परिणाम अपेक्षित नहीं है।

 SELECT * FROM ( SELECT TOP 20 t.*, ROW_NUMBER() OVER (ORDER BY field1) AS rn FROM table1 t ORDER BY field1 ) t WHERE rn > 10 

Syntactically MySQL LIMIT क्वेरी इस तरह से कुछ है:

 SELECT * FROM table LIMIT OFFSET, ROW_COUNT 

इस तरह माइक्रोसॉफ्ट एसक्यूएल सर्वर में अनुवाद किया जा सकता है

 SELECT * FROM ( SELECT TOP #{OFFSET+ROW_COUNT} *, ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS rnum FROM table ) a WHERE rnum > OFFSET 

अब आपकी क्वेरी को select * from table1 LIMIT 10,20 होगा:

 SELECT * FROM ( SELECT TOP 30 *, ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS rnum FROM table1 ) a WHERE rnum > 10 

इस प्रकार मैं एमएस एसक्यूएल सर्वर 2012 में परिणामों को सीमित करता हूं

 SELECT * FROM table1 ORDER BY columnName OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY 

नोट: OFFSET का उपयोग केवल ऑर्डर करके या उसके साथ में किया जा सकता है।

कोड लाइन ऑफसेट एक्सएक्स ROWS FETCH अगले yy ROW केवल समझाने के लिए

"एक्सएक्स" वह रिकार्ड / पंक्ति संख्या है जिसे आप टेबल से खींचना शुरू करना चाहते हैं।
IE: यदि तालिका 1 में 40 रिकॉर्ड है। ऊपर दिए गए कोड पंक्ति 10 से खींचने लगेंगे।

"Yy" रिकॉर्ड / पंक्तियों की संख्या है जिसे आप तालिका से खींचना चाहते हैं
पिछले उदाहरण पर निर्माण करने के लिए
आईई: यदि तालिका 1 में 40 रिकॉर्ड हैं और आपने 10 पंक्ति से खींच लिया और 10 के अगले सेट को पकड़ लिया (yy)
इसका मतलब होगा, ऊपर दिए गए कोड में पंक्ति 1 से शुरू होने वाली तालिका 1 से रिकॉर्ड को 10 में समाप्त हो जाएगा और 20 पर समाप्त होगा। इस प्रकार पंक्तियों को खींचकर 10 – 20

OFFSET पर अधिक जानकारी के लिए लिंक देखें

यह एक कारण है कि मैं एमएस सर्वर का उपयोग करने से बचने का प्रयास करता हूं … लेकिन वैसे भी। कभी-कभी आपके पास कोई विकल्प नहीं है (हाँ! और मुझे एक पुरानी संस्करण का उपयोग करना होगा !!)

मेरा सुझाव आभासी तालिका बनाना है:

से:

 SELECT * FROM table 

सेवा मेरे:

 CREATE VIEW v_table AS SELECT ROW_NUMBER() OVER (ORDER BY table_key) AS row,* FROM table 

तो बस क्वेरी:

 SELECT * FROM v_table WHERE row BETWEEN 10 AND 20 

यदि खेतों को जोड़ा या निकाला जाता है, तो "पंक्ति" स्वचालित रूप से अपडेट हो जाता है।

इस विकल्प के साथ मुख्य समस्या यह है कि ORDER BY निश्चित है। इसलिए यदि आप एक अलग आदेश चाहते हैं, तो आपको एक और दृश्य बनाना होगा।

अद्यतन करें

इस दृष्टिकोण के साथ एक और समस्या है: यदि आप अपने डेटा को फ़िल्टर करने की कोशिश करते हैं, तो यह अपेक्षा के अनुरूप काम नहीं करेगा। उदाहरण के लिए, यदि आप ऐसा करते हैं:

 SELECT * FROM v_table WHERE field = 'test' AND row BETWEEN 10 AND 20 

जहां उन आंकड़ों तक सीमित हो जाता है जो 10 से 20 के बीच की पंक्तियों में होते हैं (पूरे डेटासेट को खोजने और आउटपुट सीमित करने के बजाय)

यह एक बहु कदम दृष्टिकोण है जो SQL2000 में काम करेगा।

 -- Create a temp table to hold the data CREATE TABLE #foo(rowID int identity(1, 1), myOtherColumns) INSERT INTO #foo (myColumns) SELECT myData order By MyCriteria Select * FROM #foo where rowID > 10 
 SELECT * FROM ( SELECT top 20 -- ($a) number of records to show * FROM ( SELECT top 29 -- ($b) last record position * FROM table -- replace this for table name (ie "Customer") ORDER BY 2 ASC ) AS tbl1 ORDER BY 2 DESC ) AS tbl2 ORDER BY 2 ASC; -- Examples: -- Show 5 records from position 5: -- $a = 5; -- $b = (5 + 5) - 1 -- $b = 9; -- Show 10 records from position 4: -- $a = 10; -- $b = (10 + 4) - 1 -- $b = 13; -- To calculate $b: -- $b = ($a + position) - 1 -- For the present exercise we need to: -- Show 20 records from position 10: -- $a = 20; -- $b = (20 + 10) - 1 -- $b = 29; 

अगर मुझे सही याद है (जब से मैं SQL सर्वर के साथ छेड़खानी कर रहा था) आप कुछ इस तरह से उपयोग कर सकते हैं: (2005 और ऊपर)

 SELECT * ,ROW_NUMBER() OVER(ORDER BY SomeFields) AS [RowNum] FROM SomeTable WHERE RowNum BETWEEN 10 AND 20 
 SELECT TOP 10 * FROM table; 

के समान है

 SELECT * FROM table LIMIT 0,10; 

एमएसएसक्यूएल में लिमिट में कार्यान्वयन के बारे में एक लेख यहां एक अच्छा पढ़ा है, विशेष रूप से टिप्पणियां।