【发布时间】:2016-10-27 05:33:46
【问题描述】:
While Exists (Select * From Col Where Depth Is Null)
Update T
Set T.Depth = P.Depth + 1,
T.Lineage = P.Lineage + LTrim(Str(T.ParentId, 6, 0)) + '/'
From Col T
Join Col P On T.ParentId = P.Id
Where
P.Depth >= 0
And P.Lineage Is Not Null
And T.Depth Is Null
【问题讨论】:
-
Daniel:请在评论中保持建设性。我的猜测是 abhi234u 不明白如何缩进代码.. 要添加您的代码,您需要在应该添加为代码 sn-ps 的文本之前有 4 个空格
-
有问题吗?或者这是一份关于您当前开发工作状态的报告?如果(隐含的)问题是“我为什么要观察这种行为?”,最可能的解释是
Col和Depth IS NULL中的行永远不会(也永远不会)被更新。例如,如果 Col 中有一行(ParentId, Depth)元组值为(NULL,NULL),则该行将不受 UPDATE 语句的影响。 -
之前有一个问题,但他已经将代码添加为图像,在我指示如何将文本添加为代码之后,我认为在编辑中删除了前一个问题。他还在问题中写道,查询给出了正确的输出,所以我认为 BEGIN 和 END 标签会指示代码知道查询代码的哪一部分应该受到 WHILE 循环的影响。这有点猜测,因为我们不知道相关代码后面是否有代码
-
可能是父标识符之一为空?如果是,您的联接将不会评估为 true,因此永远不会更新该行的深度。
标签: sql sql-server while-loop