【发布时间】:2018-10-22 00:09:50
【问题描述】:
我有一个系统,其中我有递归链接的文档,我需要创建一个查询来检测源文档。
我已经能够使用带有 While 的存储过程来实现相同的功能,但是性能很糟糕,因为我必须处理大约 100 万条记录。有关如何实现此递归查询/SP 的任何建议?
在下面的示例中,我找到了文档 O - 12345,我需要找到原始文档 (A - 29503)。我所有的原始文档都以 DocumentType = A 开头。
DocumentType CodDocument DocumentTypeOrigin CodDocumentOrigin
O 12345 E 32456
E 32456 P 98472
P 98472 A 29503
A 29503
我想得到像(已编辑)这样的输出:
DocumentType CodDocument DocumentTypeOrigin CodDocumentOrigin FinalDocumentTypeOrigin FinalCodDocumentOrigin
O 12345 E 32456 A 29503
E 32456 P 98472 A 29503
P 98472 A 29503 A 29503
A 29503 A 29503
感谢您的帮助!
【问题讨论】:
-
那么,您期望的输出是什么?
-
注意:递归查询通常并不比使用 While 或 Cursors 更好或更差。特别是对于单次查找(相对于批量查询和 DML)。
-
定义明确的游标通常比while循环快
-
@Larnu,我已经编辑了我的问题以获得预期的结果。基本上我需要的是在每个文档中都有开始这个递归行的文档。
-
您可能对此感兴趣;这是与正常 rCTE 完全不同的方法:Hierachies on Steroids。
标签: sql sql-server recursion sql-server-2014