簡體   English   中英

使用選項(MAXRECURSION 0)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM