[英]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.