簡體   English   中英

如何在SQL中存儲遞歸CTE的結果?

[英]How can I store the result of a recursive CTE in SQL?

如果我有這樣的遞歸CTE,如何將結果存儲在變量中?

WITH MyCTE (ChildID, ParentID)
AS
(
   SELECT ID, ParentID From MyTable
    WHERE ID = 1
   UNION ALL
    SELECT MT.ID, MT.ParentID 
    FROM MyCTE Child
    JOIN MyTable MT ON MT.ID = Child.ParentID
    WHERE Child.ParentID IS NOT NULL
)
SELECT COUNT(*)
FROM MyCTE
OPTION (MAXRECURSION 20)

我嘗試了以下操作,但是SSMS抱怨這兩個選項的語法:

DECLARE @numberOfRecords int = (
WITH MyCTE (ChildID, ParentID)
AS
(
   SELECT ID, ParentID From MyTable
    WHERE ID = 1
   UNION ALL
    SELECT MT.ID, MT.ParentID 
    FROM MyCTE Child
    JOIN MyTable MT ON MT.ID = Child.ParentID
    WHERE Child.ParentID IS NOT NULL
)
SELECT COUNT(*)
FROM MyCTE
OPTION (MAXRECURSION 20))

WITH MyCTE (ChildID, ParentID)
AS
(
   SELECT ID, ParentID From MyTable
    WHERE ID = 1
   UNION ALL
    SELECT MT.ID, MT.ParentID 
    FROM MyCTE Child
    JOIN MyTable MT ON MT.ID = Child.ParentID
    WHERE Child.ParentID IS NOT NULL
)
DECLARE @numberOfRecords int = (
SELECT COUNT(*)
FROM MyCTE
OPTION (MAXRECURSION 20))

您可以先聲明變量,然后分配它:

DECLARE @numberOfRecords int;

WITH MyCTE (ChildID, ParentID) AS (
      SELECT ID, ParentID
      FROM MyTable
      WHERE ID = 1
      UNION ALL
      SELECT MT.ID, MT.ParentID 
      FROM MyCTE Child JOIN
           MyTable MT
           ON MT.ID = Child.ParentID
      WHERE Child.ParentID IS NOT NULL
     )
SELECT @numberOfRecords = COUNT(*)
FROM MyCTE
OPTION (MAXRECURSION 20);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM