【发布时间】:2018-04-12 10:41:31
【问题描述】:
如果我有这样的递归 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))
【问题讨论】:
-
在 CTE 之前先声明你的变量并写 select @Variable = count(*) from myCTE option(maxrecursion 20)
标签: sql sql-server common-table-expression recursive-query