TA              id  name
1    A
2    B
3    C
4    D
.......TBid  ParentID  ChildID
1     1         2
2     2         3
3     3         4
4     4         1表A是主表(存储所有的数据,无关系排列)
表B是关系表,存储表A中各条记录的关系,我做了一个自定义函数,如果传入一个TA表中的一个ID,会用递归的方式查出他所有的节点(树状结构)但是明显能看到TB中的关系存在循环引用哪位能帮忙写一个验证是否存在循环关系的函数啊 不胜感激条件是传入一个ID,察看从它开始的所有节点是否存在循环引用,着急

解决方案 »

  1.   

    -- 存在循环, 返回1, 否则返回0CREATE FUNCTION dbo.f_Check(@id int)
    RETURNS bit
    AS
    BEGIN
    DECLARE @re bit, @pid int
    SELECT @re = 0, @pid = ParentID
    FROM TB
    WHERE ChildID = @id
    WHILE @@ROWCOUNT >0
    BEGIN
    IF @pid = @ID
    RETURN 1

    SELECT @re = 0, @pid = ParentID
    FROM TB
    WHERE ChildID = @pid
    END

    RETURN(0)
    END
    GO