树结构表递归查询在ORACLE和MSSQL中的实现方法 [续]

上文中MSSQL的数据是给定顶级对象,获取顶级下面的所有树,'

根据上面的写法,我改出来根据树枝列出根

ALTER function [dbo].[GetProjectTreeByProjectID1] (@id [uniqueidentifier])
returns @t table(
    [Guid] [uniqueidentifier],
    [ProjectName] [varchar](50),
    [Remark] [varchar](100),
    [ParentProject] [uniqueidentifier],
    [Depth] [int])
as
begin
    insert into @t select * from BI_Project where guid = @id
    while @@rowcount > 0
        insert @t
        select a.*
        from @t as b inner join BI_Project as a on b.parentproject = a.guid and a.guid not in(select guid from @t)
   return

end

 

本人最T-SQL并不是很在行,故在此解释一下以备以后忘记时回忆, 如有错误恳请指正:

1.ALTER function [dbo].[GetProjectTreeByProjectID1] (@id [uniqueidentifier])   --function 说明是一个MSSQL 方法
returns @t table(      ---此处说明,此function返回的是一个下述表结构的一个表
    [Guid] [uniqueidentifier],
    [ProjectName] [varchar](50),
    [Remark] [varchar](100),
    [ParentProject] [uniqueidentifier],

    [Depth] [int])

 

2. insert into @t select * from BI_Project where guid = @id

先将当前对象插入到要返回的对象表@t中.

 

3. 此部分是关键部分,分解开来说明:

  while @@rowcount > 0

        insert @t
        select a.*

        from @t as b inner join BI_Project as a on b.parentproject = a.guid and a.guid not in(select guid from @t)

   3.1 @@rowcount --应该是MSSQL 内置变量,我们每次执行完SQL之后,MSSQL会自动设置@@rowcount的值为当前执行的结果的行数.

       3.2  from @t as b inner join BI_Project --将我们[当前:说明这个零时表中的数据实动态变化的]的零时表@t(也是执行完要返回的表哦)与原表[BI_Project]连接;

       3.3 条件说明:  on b.parentproject = a.guid and a.guid not in(select guid from @t) --B的parentproject与A.主键连接,并且A中排除已存在在B中的记录.

       3.4 Q:  a.guid not in(select guid from @t) 这句可以写具体的值吗?

             A: 不可以, 因为@t表中的记录是动态增加的,如果写静态的值,这个循环就会变成一个死循环.

 


       

 

 

posted @   DukeCheng  阅读(561)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示