Sql server 使用动态层次结构SQL Server

Sql server 使用动态层次结构SQL Server,sql-server,recursion,dynamic,hierarchy,hierarchical-data,Sql Server,Recursion,Dynamic,Hierarchy,Hierarchical Data,我在SQL Server中有以下数据集 层次结构表: Report | Immediate Parent Child1 Parent1 Child2 Parent1 Child3 Parent2 Parent1 Grandparent1 Parent2 Grandparent1 数据表(仅存在于基本级别的子级): 由此,我需要创建一个包含 Report | Sales Parent1 20

我在SQL Server中有以下数据集

层次结构表:

 Report   |   Immediate Parent
 Child1       Parent1
 Child2       Parent1
 Child3       Parent2
 Parent1      Grandparent1
 Parent2      Grandparent1
数据表(仅存在于基本级别的子级):

由此,我需要创建一个包含

Report      |   Sales
Parent1         2000
Parent2         1000
Grandparent1    3000

我不知道会有多少等级,可能是曾祖父母*10。我解决这个问题的方法是使用递归和动态SQL为每个层次结构级别创建临时表

  • 为父级创建临时表,将数据表连接到层次结构表并求和(销售)

  • 为祖父母创建临时表,将父临时表连接到层次结构表并求和(销售)

  • 冲洗并重复,直到没有行受到影响(@@rowcount)

  • 将所有临时表合并到永久表中


然而,通过阅读论坛,我了解到:

  • 要避免递归
  • 要避免动态SQL
  • @@要避免行计数


我的问题是,如何在不使用所有这些糟糕做法的情况下解决问题?

为什么要避免递归查询?在这里这样做是正确的。还有为什么要避免@rowcount?有时它真的很有用。另一个可能的选择是更改表结构,使用嵌套集而不是邻接列表。这篇文章解释了如何将当前结构转换为嵌套集模型@EvaldasBuinauskas我的理解是,只要可能,就使用基于集合的>递归,因此我的问题是,是否有一种基于非递归的方法来处理problem@JamesZ,我读过一些关于反对的评论,但在进一步调查后,我认为这与这个问题没有多大关系
Report      |   Sales
Parent1         2000
Parent2         1000
Grandparent1    3000