从CTE意外结果(Unexpected results from CTE)

2019-08-01 11:57发布

我创建了一个复杂的过程,使用几个热膨胀系数(主要为递归层次的工作)。
在小样本数据集一切如预期,但在我的代码适用于大型数据集,我收到意想不到的(和错误的)结果。

我想我已经收窄做的热膨胀系数。 递归的CTE被“喂”数据在几个早期的CTE处理,这似乎是这个问题。

我设置了一个样本数据集如下:

  • 四大行具有独特的数据
  • 每行接收随机行号(这是在CTE加入

然后我拿第一CTE的结果,并执行第二CTE自联接。
我希望所有行的加入,每到自身。 实际发生的是,不平等的行联合起来。

谁能提供了对这种行为的解释?

Answer 1:

没有什么意外有关的结果,除了可能,如果你不明白。

每个CTE解决each and every time它被引用。 是的,这就是为什么它有可能在一个高事务表的简单CTE将在未来2级返回一个参考4行5列下来。

但是在你的样品,这是因为ORDER BY NEWID()的,给人一种原始CTE的各项决议不同的ROW_NUMBER() - 荷兰国际集团。 你觉得热膨胀系数都存储在内存和缓存? 在SQLFiddle网站,在你的结果,有一个“视图执行计划”链接。 它显示了2个不同的,表中的单独的扫描



文章来源: Unexpected results from CTE