Sql server 使用动态层次结构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
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