SQL无限级树的读取(不用CTE)

本文介绍了一种使用T-SQL递归构建产品及其子产品的树状结构的方法。通过创建临时表并利用递归插入操作,实现了层级结构的构建,并展示了如何获取每个产品的层级深度及路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SET NOCOUNT ON

DECLARE  @ProductId  uniqueidentifier
SET        @ProductId  = '75a42220-ef03-42ec-a8d7-8f212654a646'

CREATE TABLE #TempProducts
    (
        IndexId            
int IDENTITY (01NOT NULL,
        ProductId         
uniqueidentifier,
        Quantity          
int,
        TotalQuantity   
int,
        Depth              
int,
        RankLine          
nvarchar(MAX)
    )

    
DECLARE @Depth          int
    
DECLARE @IndexId        int

    
SET        @Depth = 0
    
SET        @IndexId = -1

    
INSERT    #TempProducts(ProductId, Quantity, TotalQuantity, Depth, RankLine)
    
VALUES    (@ProductId11@DepthCAST(@ProductId AS nvarchar(36)))
A:
     
SET        @IndexId = @IndexId + 1

    
IF (@IndexId <= SCOPE_IDENTITY())
    
BEGIN
        
SET @Depth = @Depth + 1

        
INSERT    #TempProducts (ProductId, Quantity, TotalQuantity, Depth, RankLine)
        
SELECT    c.ChildProductId, c.Quantity, t.TotalQuantity * c.Quantity, @Depth, t.RankLine + STR(c.Rank) + CAST(c.ChildProductId AS nvarchar(36))
        
FROM    dbo.mappor_ChildProducts c INNER JOIN 
            #TempProducts t 
ON c.ProductId = t.ProductId AND t.Depth = @Depth - 1

        
GOTO A
    
END

    
SELECT    * 
    
FROM       #TempProducts
    
ORDER BY t.RankLine

转载于:https://www.cnblogs.com/inorax/archive/2007/04/20/721061.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值