MSSQL提供了CTE递归取数据的方法,但是没有直接提供一个给定任意节点查找其根节点的方法(也是ms sql 2008之后的版本有我不知道)。
此外,如果数据库提供的数据出现死循时,如果没有相应的检测机制,必然导致数据库服务器资源耗尽。因此查找根节点的SQL片断(或存储过程)也是相当有用的。
declare @table table(Id int,PId int,Name varchar(20))
insert into @table values(1,NULL,'A'),(2,8,'B'),(3,1,'B'),(4,2,'B'),(