2010-06-24 5 views

उत्तर

2

मैं बस कुछ इस तरह का उपयोग किया है: -

Declare @SQL nvarchar(max), @Params nvarchar(max) 
set @Params = N'' 
Set @SQL = N'SELECT ' + Cast(@SomeNumber as varchar) + ' CASE WHERE 0 THEN TOP 5 COLUMNNAME 
         ELSE COLUMNNAME 
        END 
FROM TABLE' 

exec sp_executesql @SQL, @Params 
0

मुझे नहीं लगता क्योंकि TOP न सिर्फ एक स्तंभ लेकिन पूरी पंक्ति पर लागू किया जाता है यह संभव है है। आपको दो अलग-अलग चयन कथन बनाना होगा और उन्हें IF ELSE निर्माण में रखना होगा।

+0

साथ सबक्वेरी की का इस्तेमाल करते हैं सही, यह हासिल किया जा सकता है! एसपीई 10 9 का जवाब देखें! – OneSHOT

1

संक्षिप्त उत्तर नहीं है, आपके पास जिस तरह से है।

आप फिर भी परीक्षण करने और एक अलग क्वेरी चलाने के लिए IF उपयोग कर सकते हैं:

IF (@SomeNumber = 0) 
BEGIN 
    SELECT TOP 5 ColumnName FROM Table 
END 
ELSE 
BEGIN 
    SELECT ColumnName FROM Table 
END 
1

दो विकल्प: सशर्त एसक्यूएल या गतिशील एसक्यूएल।

(1) सशर्त:

IF @SomeNumber = 0 
    SELECT TOP 5 COLUMNAME FROM TABLE 
ELSE 
    SELECT COLUMNAME FROM TABLE 

(2) गतिशील: एक varchar() में क्वेरी का निर्माण और sp_execute को इसे पारित

4

मुझे नहीं लगता कि आप कर सकते हैं करते हैं।

आप या तो गतिशील एसक्यूएल इस्तेमाल कर सकते हैं:

Declare @int int 

set @int = 10 

exec ('Select top ' + @int + ' * From Customers') 

या आप सेट कर सकते हैं rowcount

if (@someNumber != 0) 
begin 
set rowcount 5 
end 

select * From Customers 

set rowcount 0 
17

मैं आपकी समस्या को समझ लिया है की उम्मीद: आप टॉप 5 पंक्तियों का चयन करने के लिए यदि आप पारित चाहते @ SomeNumber = 0 अन्य सभी वें इटेबल पंक्तियों का चयन करें

पहले सीधे कार्यान्वयन के रूप में आप

जैसे कुछ कर सकते हैं
declare @SomeNumber as int 

set @SomeNumber = 5 
-- set @SomeNumber = 1 

SELECT TOP (SELECT @SomeNumber) COLUMNNAME FROM MYTABLE 

आप कितनी पंक्तियाँ चाहते


अन्यथा मैं तुम्हें एक संग्रहीत प्रक्रिया लागू करने के लिए (और शायद आप पहले से ही किया था कि, अन्यथा आप का अनुसरण कर सकते का सुझाव है करने के लिए पैरामीटर मान बदल सकते हैं आदेश में अगले चरण यह करने के लिए)

CREATE procedure [dbo].[TOPCLAUSE] 

    -- clause parameter 
    @SomeNumber as integer 

AS 

IF @SomeNumber = 0 
BEGIN 
    SELECT TOP 5 COLUMNNAME FROM MYTABLE 
END 
ELSE 
BEGIN 
    SELECT COLUMNNAME FROM MYTABLE 
END 

GO 
फिर

आप

exec [dbo].[TOPCLAUSE] 0 

exec [dbo].[TOPCLAUSE] 1 
कॉल कर सकते हैं

मैं शायद अपने प्रश्न का उत्तर नहीं लेकिन मुझे पता है अगर यह आप

+1

शीर्ष चुनें (SELECT @SomeNumber) सही है। – BClaydon

1

एक और बचाव में मदद की है: शीर्ष के बारे में बयान एक पूरी पंक्ति के लिए आवेदन नहीं एक स्तंभ है जबकि ROW_NUMBER समारोह

DECLARE @DoTopJN AS bit 

SET @DoTopJN = 0 -- or 1 

SELECT X.Sequence 
     X.COLUMNA 
     --etc 

FROM (SELECT ROW_NUMBER() OVER (ORDER BY Y.Code) AS Sequence 
      ,Y.COLUMNA 
      ,Y.COLUMNB 
      -- etc. 
     FROM Y) X 

WHERE ((@DoTopJN = 0) OR (X.Sequence = 1)) 
संबंधित मुद्दे