[英]Use OPTION (MAXRECURSION 0)
我有以下在分層數據上運行的 sql 查詢:
WITH DirectReports(RootId, ManagerId, Id, RelativeEmployeeLevel) AS
(
SELECT Id RootId, ManagerId, Id, 0 AS RelativeEmployeeLevel
FROM tbl
UNION ALL
SELECT d.RootId, e.ManagerId, e.Id, RelativeEmployeeLevel + 1
FROM tbl AS e
INNER JOIN DirectReports AS d
ON e.ManagerId = d.Id
), q2 as
(
SELECT RootId,
ManagerId,
Id,
RelativeEmployeeLevel,
max(RelativeEmployeeLevel) over (partition by RootId) - RelativeEmployeeLevel LevelsBelow
FROM DirectReports
)
SELECT * FROM q2 where rootid = Id
在運行此程序時,我看到此錯誤:'語句終止。 最大遞歸 100 在語句完成之前已經用完'
我更新了查詢以包括:
選項(最大遞歸 0)
WITH DirectReports(RootId, ManagerId, Id, RelativeEmployeeLevel) AS
(
SELECT Id RootId, ManagerId, Id, 0 AS RelativeEmployeeLevel
FROM tbl
UNION ALL
SELECT d.RootId, e.ManagerId, e.Id, RelativeEmployeeLevel + 1
FROM tbl AS e
INNER JOIN DirectReports AS d
ON e.ManagerId = d.Id
), q2 as
(
SELECT RootId,
ManagerId,
Id,
RelativeEmployeeLevel,
max(RelativeEmployeeLevel) over (partition by RootId) - RelativeEmployeeLevel LevelsBelow
FROM DirectReports
OPTION (MAXRECURSION 0)
)
SELECT * FROM q2 where rootid = Id
我看到一個錯誤:關鍵字“OPTION”附近的語法不正確
我錯過了什么?
您正在嘗試使用遞歸 CTE 從每個員工開始返回組織的自上而下視圖。 我懷疑每個員工都處於組織的最高層。 如果是的話,就沒有理由這樣做了。 我的猜測是頂部有一個人。
在沒有OPTION(MAXRECURSION = 0)
的情況下先試試這個。 我無法想象你有超過 100 層的管理層。
WITH DirectReports(RootId, ManagerId, Id, RelativeEmployeeLevel) AS
(
SELECT Id RootId, ManagerId, Id, 0 AS RelativeEmployeeLevel
FROM tbl
WHERE EmployeeName = 'Head Honcho'
UNION ALL
SELECT d.RootId, e.ManagerId, e.Id, RelativeEmployeeLevel + 1
FROM tbl AS e
INNER JOIN DirectReports AS d
ON e.ManagerId = d.Id
), q2 as
(
SELECT RootId,
ManagerId,
Id,
RelativeEmployeeLevel,
max(RelativeEmployeeLevel) over (partition by RootId) - RelativeEmployeeLevel LevelsBelow
FROM DirectReports
)
SELECT * FROM q2 where rootid = Id
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.