- Trees.DirectReports 是一个闭包(层次结构)表。
- 有一个名为
Users
:的表RowID, EmployeeId, and MangerId
。@RowCount
是该表中的记录数,是该表#EmpMgr
的游标。
下面是我想从基于游标的操作转换为基于集合的操作的相关 sql 代码。
WHILE @RowCount <= @NumberRecords --loop through each record in Users table
BEGIN
SET @EmpId = (SELECT EmployeeId FROM #EmpMgr WHERE RowID = @RowCount)
SET @MgrId = (SELECT ManagerId FROM #EmpMgr WHERE RowID = @RowCount)
INSERT INTO [Trees].[DirectReports](EmployeeId, ManagerId, Depth)
SELECT c.EmployeeId, p.ManagerId, p.Depth + c.Depth + 1
FROM Trees.DirectReports p join Trees.DirectReports c
WHERE p.EmployeeId = @MgrId AND c.ManagerId = @EmpId
SET @RowCount = @RowCount + 1
END
所以我真的很想弄清楚如何将其作为一个集合查询来执行,因为我知道这样会快得多,但我的大脑今天还没有建立正确的连接来解决这个问题。
*请注意,要回答这个问题,您需要已经了解闭包表的工作原理。否则上面的内容可能没有意义。