【发布时间】:2016-10-24 15:32:39
【问题描述】:
我正在尝试编写一个递归 CTE,它引用在它之前编写的另一个 CTE。
第一个 cte nodes 在编写递归 Hierarchy cte 之前,我用分号关闭:
WITH nodes(node, node_name, parent, parent_name) AS
(
SELECT
Grp.PermissionGroupID as node,
Grp.GroupName as node_name,
GrpLink.ParentPermissionGroupID as parent,
ParentGrp.GroupName as parent_name
FROM _CCC_Permission_Group Grp
LEFT JOIN _CCC_Permission_GroupGroup GrpLink
on Grp.PermissionGroupID = GrpLink.ChildPermissionGroupID
LEFT JOIN _CCC_Permission_Group ParentGrp
on GrpLink.ParentPermissionGroupID = ParentGrp.PermissionGroupID
);
WITH Hierarchy(node, node_name, depth, parent, parent_name)
AS
(
SELECT
node,
node_name,
0,
parent,
parent_name
FROM nodes as FirstDepth
WHERE parent IS NULL
UNION ALL
SELECT
NextDepth.node,
NextDepth.node_name,
Parent.depth + 1,
Parent.parent,
Parent.parent_name
FROM nodes as NextDepth
INNER JOIN Hierarchy as Parent
on NextDepth.parent = Parent.parent
)
SELECT *
FROM Hierarchy
OPTION (MAXRECURSION 32767)
我得到错误:
消息 102,级别 15,状态 1,第 17 行 ';' 附近的语法不正确。
当我删除分号时,我得到了错误:
Msg 156, Level 15, State 1, Line 19 关键字附近的语法不正确 '和'。
消息 319,级别 15,状态 1,第 19 行 关键字“与”。 如果此语句是公用表表达式,则 xmlnamespaces 子句或更改跟踪上下文子句,上一个 语句必须以分号结束。
...我不经常编写 CTE(更不用说递归了),所以我不太清楚如何解决与 ; 位置的明显冲突。
【问题讨论】:
标签: sql tsql common-table-expression