So rufen Sie eine rekursive Funktion in sql server

Ich habe eine Tabelle wie folgt

cat_id  Cat_Name    Main_Cat_Id

1       veg         null
2       main course 1
3       starter     1
4       Indian      2
5       mexican     2
6       tahi        3
7       chinese     3
8       nonveg      null
9       main course 8
10      indian      9
11      starter     8
12      tahi        11
13      chinese     11

(Main_Cat_Id ist cat_id der zuvor hinzugefügte Kategorie, in die es gehört)

Diese Tabelle wird verwendet für die Kategorien Produkt, wo veg Kategorie hat zwei Unterkategorien dieser Kategorie Hauptgericht und starter die Identifizierung von main_cat_id
und diese Unterkategorien hat wiederum sub-Kategorie indischen und mexikanischen

Und diese Kategorisierung ist abhängig von der Benutzer; er kann hinzufügen, mehr Unterkategorien, die auf Indische, Mexikanische, so dass er kann jede beliebige Ebene der Kategorisierung

nun muss ich Sie alle Unterkategorien, von jedem Punkt, wie wenn ich Gemüse habe ich zu wählen

(1)veg > (2)main course(1) > (4)indian(2)
                           > (5)mexican(2)
       > (3)starter(1)     > (6)thai(3)
                           > (7)chinese(3)

bilden die Zeichenfolge als 1,2,4,5,3,6,7

dazu schrieb ich eine sql-Funktion als

CREATE FUNCTION [dbo].[GetSubCategory_TEST]
( @MainCategory int, @Category varchar(max))
RETURNS varchar(max)
AS
BEGIN
    IF EXISTS (SELECT Cat_Id FROM Category WHERE Main_Cat_Id=@MainCategory)
    BEGIN
        DECLARE @TEMP TABLE
        (
            CAT_ID INT
        )
        INSERT INTO @TEMP(CAT_ID) SELECT Cat_Id FROM Category WHERE Main_Cat_Id=@MainCategory
        DECLARE @TEMP_CAT_ID INT
        DECLARE CUR_CAT_ID CURSOR FOR SELECT CAT_ID FROM @TEMP
            OPEN CUR_CAT_ID
            WHILE 1 =1
                BEGIN
                FETCH NEXT FROM CUR_CAT_ID
                INTO  @TEMP_CAT_ID;
                IF @@FETCH_STATUS <> 0
                    SET @Category=@Category+','+ CONVERT(VARCHAR(50), @TEMP_CAT_ID)
                    SET @Category = [dbo].[GetSubCategory](@TEMP_CAT_ID,@Category)
                END
                CLOSE CUR_CAT_ID
                DEALLOCATE CUR_CAT_ID
    END
    return @Category
END 

aber diese Funktion halten auf ausführen, und nicht gibt die gewünschte Ausgabe, die ich nicht versteht, was Los ist plz mir helfen, dieses

while 1=1 ?? es gehe unendlich! ?
Möglich, Duplikat der SQL rekursive Abfrage liefert alle Vorfahren eines items

InformationsquelleAutor Rhushikesh | 2014-05-28

Schreibe einen Kommentar