【发布时间】:2013-11-07 14:57:57
【问题描述】:
我对这个递归 CTE 有一点问题,它可以正常工作,除非我有一个没有 root 可读权限的用户意味着这个元素没有条目。因此,如果我对仅在树内的叶子上具有权限的用户运行此查询,则此查询的级别部分将无法正常工作。
它将显示真正的 level 层次结构,例如 6,但对于他来说,它是第一个可读元素,所以它应该是 1。
WITH Tree
AS (
SELECT
id,
parent,
0 AS Level,
id AS Root,
CAST(id AS VARCHAR(MAX)) AS Sort,
user_id
FROM SourceTable
WHERE parent IS NULL
UNION ALL
SELECT
st.id,
st.parent,
Level + 1 AS Level,
st.parent AS Root,
uh.sort + '/' + CAST(st.id AS VARCHAR(20)) AS Sort,
st.user_id
FROM SourceTable AS st
JOIN Tree uh ON uh.id = st.parent
)
SELECT * FROM Tree AS t
JOIN UserTable AS ut ON ut.id = t.user_id AND ut.user_id = '141F-4BC6-8934'
ORDER BY Sort
等级如下
id level
5 0
2 1
7 2
4 2
1 2
6 1
3 2
8 2
9 3
当用户现在只有对 id 8 和 9 的读取权限时,来自 CTE 的级别对于 id 8 和 3 对于 id 9 保持在 2,但如果之前没有人,我需要 id 8 级别 1
【问题讨论】:
-
你能展示一些数据和预期的结果吗?
-
当前用户刚刚阅读时的级别如下 id, level 5, 0 2, 1 7, 2 4, 2 1, 2 6, 1 3, 2 8, 2 9, 3 id 8 和 9 的权限 cte 的级别对于 id 8 和 3 对于 id 9 保持在 2,但如果之前没有人,我需要 id 8 级别 1
-
感谢后面的相应更新
-
能否请您添加
SourceTable的数据?否则很难理解你有什么作为递归 CTE 的来源。 -
如果没有 parentID 的值,就很难创建任何有效的脚本...如果您要添加这些值,则可以找到解决方案
标签: sql sql-server-2008 common-table-expression