通常,在使用递归cte的select语句的末尾。 但是,在视图内将行不通。快速搜索将我带到了这篇文章-解释了正确的方法。
原来,您不能在视图内部使用查询提示,但是可以并且应该在调用视图的查询中使用它。
样表:
CREATE TABLE T
(
id int,
parent int
)
INSERT INTO T VALUES (1, NULL), (2, 1), (3, 1), (4, 2), (5, 2), (6, 3), (7, 4), (8, 5);
GO
创建视图:
CREATE VIEW V
AS
WITH CTE AS
(
SELECT id, parent
FROM T
WHERE parent IS NULL
UNION ALL
SELECT t.id, t.parent
FROM T
INNER JOIN CTE ON t.parent = cte.id
)
SELECT *
FROM CTE
GO
执行视图:
SELECT *
FROM V
OPTION (MAXRECURSION 2);