создание хранимой процедуры из рекурсивного запроса - PullRequest
2 голосов
/ 18 июня 2011

Я хотел бы создать хранимую процедуру mssql для запуска запроса, подобного следующему:

SELECT thingID FROM things WHERE thingParentID = #arguments.id#

рекурсивно, накапливая thingID s в списке, который затем возвращается хранимой процедурой.

Кто-нибудь знает такой пример, на который они могут ссылаться? или какая-то документация, которая может мне помочь?

Спасибо.

1 Ответ

7 голосов
/ 18 июня 2011

Это будет работать на SQL Server 2005 и более поздних версиях.

CREATE FUNCTION dbo.Ancestors (@thingID int)
RETURNS TABLE
AS
RETURN
    WITH CTE AS
    (
        SELECT thingID, 1 [Level]
        FROM dbo.things
        WHERE thingParentID = @thingID

        UNION ALL

        SELECT p.thingID, [Level] + 1 [Level]
        FROM CTE c
        JOIN dbo.things p
            ON p.thingParentID = c.thingID
    )
    SELECT thingID, [Level]
    FROM CTE

GO

CREATE PROCEDURE GetAncestors (@thingID int)
AS
    SELECT thingID, [Level]
    FROM dbo.Ancestors(@thingID)
GO
...