回答

0

這是那種東西你正在尋找

CREATE TABLE [dbo].[hierarchical_table](
    [id] INT, 
    [parent_id] INT, 
    [data] VARCHAR(255) 
) 
GO 

INSERT [dbo].[hierarchical_table] 
SELECT 1,NULL,'/1' UNION ALL 
SELECT 2,1,'/1/2' UNION ALL 
SELECT 3,2,'/1/2/3' UNION ALL 
SELECT 4,2,'/1/2/4' UNION ALL 
SELECT 5,NULL, '/5' UNION ALL 
SELECT 6,5,'/5/6' 
GO 

CREATE FUNCTION [dbo].[fn_root_for_node] 
(
    @id int 
) 
RETURNS TABLE AS 
RETURN (
    WITH [hierarchy_cte](id, parent_id, data, [Level]) AS 
    (
     SELECT 
      id, 
      parent_id, 
      data, 
      0 AS [Level] 
     FROM dbo.hierarchical_table 
     WHERE id = @id 
     UNION ALL 
     SELECT t1.id, t1.parent_id, t1.data, h.[Level] + 1 AS [Level] 
     FROM dbo.hierarchical_table AS t1 
     INNER JOIN hierarchy_cte AS h 
      ON t1.id = h.parent_id 
    ) 
    SELECT TOP 1 
     id, parent_id, data, [Level] 
    FROM [hierarchy_cte] 
    ORDER BY [Level] DESC 
) 
GO 

SELECT * FROM [dbo].[fn_root_for_node] (6) 
GO 
+0

點上,下降到代碼的確切行,謝謝。 – ProfK

相關問題