2009-12-18 4 views
166
declare @top int 
set @top = 5 
select top @top * from tablename 

क्या यह संभव है?इसे गतिशील बनाने के बिना SQL सर्वर में चयनित कथन में शीर्ष के साथ चर का उपयोग करें

या ऐसे तर्क के लिए कोई विचार (मैं गतिशील क्वेरी का उपयोग नहीं करना चाहता)?

उत्तर

286

हाँ, SQL सर्वर 2005 में यह top खंड में एक चर का उपयोग करना संभव है।

select top (@top) * from tablename 
+0

आपके प्रयास के लिए धन्यवाद कीड़े खोजने के लिए बहुत कठिन साथ खत्म हो जाएगा, यह वास्तव में मदद की मेरे लिए!!! – Paresh

+0

यह पूरी तरह से अजीब है ... मुझे इस बारे में पता नहीं था और मैं इस पर कुछ मिनट के लिए अटक गया। धन्यवाद (+1) – Christos

38

एसक्यूएल सर्वर 2005 वास्तव में हमें एक चर, अभिव्यक्ति या कथन का उपयोग करके शीर्ष खंड को पैरामीटर करने की अनुमति देता है। तो अगर आप की तरह कर सकते हैं:

SELECT TOP (@foo) a FROM table ORDER BY a 

SELECT TOP (SELECT COUNT(*) FROM somewhere else) a FROM table ORDER BY a 

SELECT TOP (@foo + 5 * 4/2) a FROM table ORDER BY a 

Source

24

2005 में और बाद में, आप इसे कर सकते हैं क्योंकि इस धागे में कई जवाब हैं।

क्या कम ज्ञात है कि आप इसे SEK ROWCOUNT का उपयोग करके 2k में भी प्राप्त कर सकते हैं।

-- Works in all versions 
    SELECT TOP 10 

    -- Does not work on 2000 
    SELECT TOP (10) 
    SELECT TOP (@rows) 

    -- Works in both 2ooo and 2oo5 
    SET ROWCOUNT @max 

    SELECT * 
    FROM ... 

    SET ROWCOUNT 0 

ध्यान दें, यदि आप अंत में सेट ROWCOUNT 0 भूल जाते हैं, सीमा बनी रहती है .. और आप :-)

+4

यह भी ध्यान रखें कि सेट ROWCOUNT निष्पादन योजना को प्रभावित नहीं करता है, इसलिए एसक्यूएल 2005 में टॉप का उपयोग करना पसंद है। – Guffa

+0

'SET ROWCOUNT' के बारे में चर्चा के लिए वैकल्पिक उत्तर – Paresh

+2

+1 के लिए धन्यवाद। यह वह समाधान नहीं है जिसका मैंने उपयोग किया था, लेकिन मुझे यह पसंद है कि आपने इसे – Sam

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