SQL सर्वर में गतिशील चयन शीर्ष @var


308

SQL सर्वर में लौटने के लिए मैं एक डायनामिक वैरिएबल की पंक्तियों की मात्रा कैसे निर्धारित कर सकता हूं? SQL Server 2005+ में नीचे मान्य सिंटैक्स नहीं है:

DECLARE @count int
SET @count = 20

SELECT TOP @count * FROM SomeTable

2
क्या आप SQL 2005 या 2008 चला रहे हैं?
— ब्रायन किम

वर्तमान में SQL सर्वर 2005 चल रहा है
— eddiegroves

जवाबों:


561
SELECT TOP (@count) * FROM SomeTable

यह केवल SQL 2005+ के साथ काम करेगा


52
मैं हमेशा कोष्ठकों को भी भूल जाता हूं।
— जॉन शीहान

14
यह महान है! यह सब समय मुझे लगा कि मुझे गतिशील एसक्यूएल का उपयोग करना था।
— लगुना

1
कोष्ठकों को न जोड़कर अपनी क्वेरी में मूर्खतापूर्ण गलती का एहसास करने के लिए और कौन है?
— राघव

आपने मेरा दिन बचाया! मैंने केवल इसके लिए सभी को गतिशील क्वेरी में स्थानांतरित करने के लिए सोचा!
— अल्ताफ पटेल

41

सिंटैक्स "select top (@var) ..." केवल SQL SERVER 2005+ में काम करता है। SQL 2000 के लिए, आप कर सकते हैं:

set rowcount @top

select * from sometable

set rowcount 0 

उम्मीद है की यह मदद करेगा

Oisin।

(rowcount के साथ @@ rowcount बदलने के लिए संपादित - धन्यवाद अगस्त)


1
मैंने सुना है कि यदि आपके पास मल्टी-कॉलम प्राथमिक कुंजी है तो @@ RowCount के साथ गलत पंक्ति संख्या प्राप्त करना संभव है। क्या यह सच है?
— ब्रायन किम


4

गतिशील एसक्यूएल का उपयोग करना और निष्पादन कमांड के साथ इसे निष्पादित करना भी संभव है:

declare @sql  nvarchar(200), @count int
set @count = 10
set @sql = N'select top ' + cast(@count as nvarchar(4)) + ' * from table'
exec (@sql)

8
लेकिन इस दृष्टिकोण के साथ SQL इंजेक्शन हमलों से सावधान रहें (बहुत)
— MadSkunk

4

या आप बस कोष्ठक में चर डालते हैं

DECLARE @top INT = 10;

SELECT TOP (@Top) *
FROM <table_name>;

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.