Advertisement

SQL应用:查找根节点

阅读量:

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'),(5,2,'B'),
    (6,3,'B'),(7,4,'B'),(8,7,'B'),(9,8,'B')
    
    -- 循环中开始2 -> 8 -> 7 -> 4 -> 2
    -- 循环外开始9 -> 8 -> 7 -> 4 -> 2 -> 8 ->... 
    
    declare @paramId int = 7,@RootPId int = NULL,@Id int,@tmpId int,
    @count int = (select COUNT(*) from @table),@i int = 0
    set @Id = @pa

全部评论 (0)

还没有任何评论哟~