Я пытаюсь написать рекурсивный CTE, который ссылается на другой CTE, написанный перед ним.CTE и закрывающие полуколоны
Первый КТР nodes
Я закрыл-офф с запятой перед записью рекурсивной Hierarchy
КТРА:
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, Level 15, State 1, Line 17 Incorrect syntax near ';'.
Когда я удалить точку с запятой, я получить ошибки:
Msg 156, Level 15, State 1, Line 19 Incorrect syntax near the keyword 'WITH'.
Msg 319, Level 15, State 1, Line 19 Incorrect syntax near the keyword 'with'. If this statement is a common table expression, an xmlnamespaces clause or a change tracking context clause, the previous statement must be terminated with a semicolon.
... Я не пишу CTE (l et only recursive), что часто, поэтому я не слишком уверен, как разрешить этот очевидный конфликт с размещением ;
.