我在 MS SQL 中有以下递归表值函数,以便从数据库中检索对象的层次结构:
WITH tmpField (ParentNum, ChildNum, FieldNum, FieldDescr, Iteration) AS
(
SELECT Field.ParentNum, Field.ChildNum, Field.FieldNum, Field.FieldDescr, 1
FROM Field
WHERE Field.ParentNum = @ParentNum
UNION ALL
SELECT Field.ParentNum, Field.ChildNum, Field.FieldNum, Field.FieldDescr, tmpField.Iteration + 1
FROM Field INNER JOIN
tmpField on Field.ParentNum = tmpField.ChildNum
)
SELECT DISTINCT ParentNum AS ParentNum, ChildNum AS ChildNum, FieldNum, FieldDescr
FROM tmpField
我想通过以下方式修改它:
在最后一次迭代中,当没有更多“孩子”时,我希望该ChildNum
字段具有FieldNum
. 在所有以前的迭代中,ChildNum
应该有该ChildNum
字段的值,就像现在一样。
任何人都可以建议一种方法来实现这一点,使用上述查询作为起点?
请注意:尽管它的名称,该字段ChildNum
不引用行的任何子项,但应将其解释为该行的标识符。