मैं गतिशील टॉप उपयोग करना चाहते हैं या एक तरह से इस तरह नहीं ...एक टी-एसक्यूएल सशर्त टॉप क्लॉज संभव है?
SELECT @SomeNumber CASE WHERE 0 THEN TOP 5 COLUMNNAME
ELSE COLUMNNAME
END
FROM TABLE
मैं गतिशील टॉप उपयोग करना चाहते हैं या एक तरह से इस तरह नहीं ...एक टी-एसक्यूएल सशर्त टॉप क्लॉज संभव है?
SELECT @SomeNumber CASE WHERE 0 THEN TOP 5 COLUMNNAME
ELSE COLUMNNAME
END
FROM TABLE
मैं बस कुछ इस तरह का उपयोग किया है: -
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
मुझे नहीं लगता क्योंकि TOP
न सिर्फ एक स्तंभ लेकिन पूरी पंक्ति पर लागू किया जाता है यह संभव है है। आपको दो अलग-अलग चयन कथन बनाना होगा और उन्हें IF ELSE
निर्माण में रखना होगा।
संक्षिप्त उत्तर नहीं है, आपके पास जिस तरह से है।
आप फिर भी परीक्षण करने और एक अलग क्वेरी चलाने के लिए IF
उपयोग कर सकते हैं:
IF (@SomeNumber = 0)
BEGIN
SELECT TOP 5 ColumnName FROM Table
END
ELSE
BEGIN
SELECT ColumnName FROM Table
END
दो विकल्प: सशर्त एसक्यूएल या गतिशील एसक्यूएल।
(1) सशर्त:
IF @SomeNumber = 0
SELECT TOP 5 COLUMNAME FROM TABLE
ELSE
SELECT COLUMNAME FROM TABLE
(2) गतिशील: एक varchar() में क्वेरी का निर्माण और sp_execute को इसे पारित
मुझे नहीं लगता कि आप कर सकते हैं करते हैं।
आप या तो गतिशील एसक्यूएल इस्तेमाल कर सकते हैं:
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
मैं आपकी समस्या को समझ लिया है की उम्मीद: आप टॉप 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
कॉल कर सकते हैं
मैं शायद अपने प्रश्न का उत्तर नहीं लेकिन मुझे पता है अगर यह आप
शीर्ष चुनें (SELECT @SomeNumber) सही है। – BClaydon
एक और बचाव में मदद की है: शीर्ष के बारे में बयान एक पूरी पंक्ति के लिए आवेदन नहीं एक स्तंभ है जबकि 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))
साथ सबक्वेरी की का इस्तेमाल करते हैं सही, यह हासिल किया जा सकता है! एसपीई 10 9 का जवाब देखें! – OneSHOT