2012-10-17 32 views
8

jak stworzyć sql CTE serwera z pętli while
mój pętlę jak tentworzyć pętli while z 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

jest rekursywna, zdecydowanie potrzebna? - jest to struktura, której użyłbym, próbując wykonać działające sumy lub schodząc w dół jak struktura danych drzewa ... dla prostej pętli 'while' jest na miejscu. – whytheq

+0

Potrzebujesz wyniku jako tabeli lub pojedynczego ciągu? – TechDo

+0

Nie można wywołać procedury składowanej jako części zapytania * - należy rozszerzyć definicję procedury składowanej do tego zapytania - czy jest to coś, co chcesz zrobić? –

Odpowiedz

3

Jeśli potrzebujesz tabela:

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

SELECT * FROM Sec 
OPTION(MAXRECURSION 0) 

Jeśli potrzebujesz jeden ciąg:

;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

poniższe zapytanie wybiera wartości od 0 do 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);