2008-10-06 22 views
236

में डायनामिक SELECT TOP @var SQL सर्वर में वापस आने के लिए पंक्तियों की मात्रा को गतिशील चर सेटिंग कैसे स्थापित कर सकता है? नीचे एसक्यूएल सर्वर में 2005+ मान्य सिंटैक्स नहीं है:SQL सर्वर

DECLARE @count int 
SET @count = 20 

SELECT TOP @count * FROM SomeTable 
+2

आप एसक्यूएल 2005 या 2008 चला रहे हैं? –

+0

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

+1

अच्छा प्रश्न। धन्यवाद। –

उत्तर

425
SELECT TOP (@count) * FROM SomeTable 

यह केवल एसक्यूएल 2005+

+37

मैं हमेशा कोष्ठक भी भूल जाता हूं। –

+10

यह बहुत अच्छा है! इस बार मैंने सोचा कि मुझे गतिशील एसक्यूएल का उपयोग करना था। – Laguna

36

वाक्य रचना के साथ काम करेंगे "का चयन करें शीर्ष (@var) ..." केवल एसक्यूएल में काम करता है सर्वर 2005+। एसक्यूएल 2000 के लिए, आप कर सकते हैं:

set rowcount @top 

select * from sometable 

set rowcount 0 

आशा इस मदद करता है

Oisin।

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

+0

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

3

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

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

लेकिन इस दृष्टिकोण के साथ [एसक्यूएल इंजेक्शन हमलों] (https://en.wikipedia.org/wiki/SQL_injection) से सावधान रहें – MadSkunk

1

या यो यू सिर्फ कोष्ठक में चर डाल

DECLARE @top INT = 10; 

SELECT TOP (@Top) * 
FROM <table_name>; 
0
declare @rows int = 10 

select top (@rows) * 
from Employees 
order by 1 desc -- optional to get the last records using the fist column of the table