一张树结构的表,如何从一个子节点,获取到这个子节点的根节点?

表结构如下

p_w_picpath

说明:

CategoryID 是节点编号;

CategoryName 是节点名称;

ParentCategoryID 是节点的父节点的编号;

测试数据如下

p_w_picpath

测试用例

已知节点ID是7,求它的根节点。(从上图,我们可以看到,结果应该是 2)

下面,给出实现SQL,一个存储过程,函数也可以

CREATE PROCEDURE GetRootCategoryID
(
	@nodeID INT
)
AS
BEGIN
	SET NOCOUNT ON;
    DECLARE @rootID INT, @currentID INT

    SELECT @rootID = ParentCategoryID, @currentID = @nodeID FROM test2 WHERE CategoryID = @nodeID;
    WHILE @rootID > 0
    BEGIN
    	SELECT @rootID = ParentCategoryID, @currentID = CategoryID FROM test2 WHERE CategoryID = @rootID;
    END

    RETURN @currentID;
END

执行的语句:

DECLARE	@return_value int

EXEC	@return_value = [dbo].[GetRootCategoryID]
		@nodeID = 7

SELECT	'Return Value' = @return_value