查找指定节点的所有父节点的示例函数.sql

CREATE FUNCTION f_Pid(@ID char(3))
RETURNS @t_Level TABLE(ID char(3),Level int)
AS
BEGIN
    DECLARE @Level int
    SET @Level=1
    INSERT @t_Level SELECT @ID,@Level
    WHILE @@ROWCOUNT>0
    BEGIN
        SET @Level=@Level+1
        INSERT @t_Level SELECT a.PID,@Level
        FROM tb a,@t_Level b
        WHERE a.ID=b.ID
            AND b.Level=@Level-1
    END
    RETURN
END
GO


--上面的用户定义函数可以处理一个节点有多个父节点的情况,对于标准的树形数据而言,由于每个节点仅有一个父节点,所以也可以通过下面的用户定义函数实现查找标准树形数据的父节点。
CREATE FUNCTION f_Pid(@ID char(3))
RETURNS @t_Level TABLE(ID char(3))
AS
BEGIN
    INSERT @t_Level SELECT @ID
    SELECT @ID=PID FROM tb
    WHERE ID=@ID
        AND PID IS NOT NULL
    WHILE @@ROWCOUNT>0
    BEGIN
        INSERT @t_Level SELECT @ID
        SELECT @ID=PID FROM tb
        WHERE ID=@ID
            AND PID IS NOT NULL
    END
    RETURN
END
原文地址:https://www.cnblogs.com/shihao/p/2526969.html