Sql CTE和闭合分号
我正在尝试编写一个递归CTE,它引用在它之前编写的另一个CTE 第一个cteSql CTE和闭合分号,sql,tsql,common-table-expression,Sql,Tsql,Common Table Expression,我正在尝试编写一个递归CTE,它引用在它之前编写的另一个CTE 第一个cte节点在编写递归的层次结构之前,我用分号关闭了它cte: WITH nodes(node, node_name, parent, parent_name) AS ( SELECT Grp.PermissionGroupID as node, Grp.GroupName as node_name, GrpLink.ParentPermissionGroupI
节点
在编写递归的层次结构之前,我用分号关闭了它
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)
我得到一个错误:
Msg 102,15级,状态1,第17行“;”附近的语法不正确
删除分号时,会出现以下错误:
消息156,级别15,状态1,第19行关键字附近语法不正确
“有”
Msg 319,15级,状态1,第19行靠近
关键字“with”如果此语句是公共表表达式,则
xmlnamespaces子句或更改跟踪上下文子句,前面的
语句必须以分号结尾
…我不经常编写CTE(更不用说递归CTE),所以我不太确定如何解决与
的明显冲突代码>位置。一个CTE
只需要一个和子句。只需在前面的CTE
末尾添加逗号,然后再加上CTE名称,即可创建stacked CTE
;WITH nodes(node, node_name, parent, parent_name) AS
(
....
),Hierarchy(node, node_name, depth, parent, parent_name)
AS
(
..
)
SELECT *
FROM Hierarchy
OPTION (MAXRECURSION 32767)
您只能在语句末尾使用结束分号。所有CTE构成一个单独的语句。在单个语句中使用多个CTE时,请使用逗号分隔每个CTE
WITH nodes(node, node_name, parent, parent_name) AS
...
), Hierarchy(node, node_name, depth, parent, parent_name) AS (
...
)
SELECT ...
OPTION (MAXRECURSION 32767);
注意末尾的分号。您应该养成包含该语句的习惯,因为将来会有更多语句需要它(例如,MERGE语句必须使用分号终止)