我遇到了以下过多的递归问题,并且正在努力想象它出错的地方
我的数据如下:
Hierarchy Id RecNo ParentRecord Data
Mike 1 100
Mike:b1 1 101 100 This One
Mike:b1:c1 1 102 101
Mike:b1:c1:d 1 103 102
Mike:b1:c2:e 1 104 102
Mike:b2 1 110 100
Dave 2 200
Dave:b4 2 201 200
Dave:b4:c3 2 202 201
我有以下UDF
CREATE FUNCTION [dbo].[IsParent] ( @HierarchyA VARCHAR(1000), @HierarchyB VARCHAR(1000) )
RETURNS INT
AS
BEGIN
DECLARE @ret INT
If dbo.CountChar(@HierarchyA, ':') >= dbo.Ifx_CountChar(@HierarchyB, ':')
SET @ret = 0
ELSE IF LEFT(@HierarchyB, LEN(@HierarchyA + ':')) = @HierarchyA + ':'
SET @ret = 1
ELSE
SET @ret = 0
RETURN @ret
END
CREATE FUNCTION [dbo].[CountChar] ( @Input VARCHAR(1000), @SearchChar CHAR(1) )
RETURNS INT
BEGIN
RETURN (LEN(@Input) - LEN(REPLACE(@Input, @SearchChar, '')))
END
我的CTE如下:
With Trees (Id, Hierachy, RecNo, Tier)
AS
(
SELECT Id, Hierachy, RecNo, dbo.CountChar(Hierachy, ':') as Tier
FROM MyData
WHERE Data="This One"
UNION ALL
SELECT e.Id, e.Hierachy, e.RecNo, dbo.CountChar(e.Hierachy, ':')
FROM
MyData e
INNER JOIN
(SELECT Id, Hierachy, RecNo FROM Trees) s
ON e.Id = s.Id
WHERE dbo.IsParent(s.Hierachy,e.Hierachy) = 1
OR dbo.IsParent(e.Hierachy,s.Hierachy) = 1
)
SELECT * FROM Trees
ORDER BY Hierachy, Tier
如果我单独使用任何一个OR子句,cte工作正常,但是当我使用它们时,它会突然超出最大递归错误。
我正在尝试根据某些数据的值重建层次结构。因此,在找到具有特定数据值的行之后,我希望根据层次结构字段指定的层次关系来识别该行的所有父项和子项。所以在上面的例子中,我想要检索与Mike
相关的以下行Mike 1 100
Mike:b1 1 101 100 This One
Mike:b1:c1 1 102 101
Mike:b1:c1:d 1 103 102
Mike:b1:c2:e 1 104 102
我想知道是否有人可以
很多thx IA
取值