2011-06-17 129 views
2

創建存儲過程,我想創建一個mssql的存儲過程運行類似以下的查詢:從遞歸查詢

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

遞歸,其中然後返回一個列表積累thingID小號由存儲過程。

有誰知道這樣的例子,他們可以鏈接到?或一些可能幫助我的文檔?

謝謝。

+3

我不認爲你需要爲此創建一個過程。所有你需要的是看看遞歸CTE – a1ex07

+0

rtce是甜的感謝提及! – ztatic

回答

6

這將適用於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 
+0

+1 Nice answer .. – CResults

+0

謝謝!如果有人有機會幫我弄清楚如何提供多個'thingID',那麼這也會有幫助。 – ztatic