2012-10-17 16 views
8

साथ पाश
इसबनाने जबकि CTE

declare @ind as int 
    declare @code as nvarchar 
    set @ind = 0 
    while @ind < 884 
    begin 
    select @ind = @ind + 1 
    --here execute Procedure 
     --and set return value to variable 
    set @code = cast (@ind as nvarchar) 
    end 
+0

एक रिकर्सिव सीटी निश्चित रूप से आवश्यक है? - यह एक संरचना है जिसका उपयोग मैं कुल योग करने की कोशिश करते समय या डेटा संरचना जैसे वृक्ष को चलाने की कोशिश करते समय उपयोग करता हूं .... एक साधारण लूप 'जबकि' के लिए जगह पर है। – whytheq

+0

आपको परिणाम के रूप में तालिका या एक स्ट्रिंग के रूप में आवश्यकता है? – TechDo

+0

आप एक क्वेरी के हिस्से के रूप में संग्रहीत प्रक्रिया को कॉल नहीं कर सकते * - आपको संग्रहीत प्रक्रिया की परिभाषा को इस क्वेरी में विस्तारित करने की आवश्यकता होगी - क्या आप ऐसा कुछ करना चाहते हैं? –

उत्तर

3

आप की जरूरत है तालिका:

;WITH Sec(Number) AS 
(
    SELECT 0 AS Number 
    UNION ALL 
    SELECT Number + 1 
    FROM Sec 
    WHERE Number < 884 
) 

SELECT * FROM Sec 
OPTION(MAXRECURSION 0) 

आप एक स्ट्रिंग की जरूरत है:

+०१२३५१६४१०६१
;WITH Sec(Number) AS 
(
    SELECT 0 AS Number 
    UNION ALL 
    SELECT Number + 1 
    FROM Sec 
    WHERE Number < 884 
) 

SELECT STUFF(a.[Str], 1, 1, '') 
FROM 
(
    SELECT (SELECT ',' + CAST(Number AS NVARCHAR(3)) 
    FROM Sec 
    FOR XML PATH(''), TYPE 
    ).value('.','varchar(max)') AS [Str] 
) AS a 
OPTION(MAXRECURSION 0) 
5

क्वेरी नीचे की तरह मेरे पाश थोड़ी देर के पाश से एसक्यूएल सर्वर CTE बनाने का तरीका से 0 884 करने के लिए मान का चयन करता:

;WITH T(Num)AS 
(
    SELECT 0 
    UNION ALL 
    SELECT Num+1 FROM T WHERE T.Num < 884 
)SELECT Num FROM T 
OPTION (MAXRECURSION 0); 
संबंधित मुद्दे