• SqlServer父节点与子节点查询及递归


    在最近老是用到这个SQL,所以记下来了:

    1:创建表

    CREATE TABLE [dbo].[BD_Booklet](
    [ObjID] [int] IDENTITY(1,1) NOT NULL,
    [ParentID] [int] NULL,
    [ObjLen] [int] NULL,
    [ObjName] [nvarchar](50) NULL,
    [ObjUrl] [nvarchar](200) NULL,
    [ObjExpress] [nvarchar](500) NULL,
    [ObjTime] [nvarchar](50) NULL,
    [ObjUID] [nvarchar](10) NULL,
    [ObjDemo] [text] NULL,
    CONSTRAINT [PK_BD_Booklet] PRIMARY KEY CLUSTERED
    (
    [ObjID] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

    GO

    2:添加数据(自己添加)

    3:根据父节点查询子节点信息(所有子节点,包括子节点的子节点)

    --公用表表达式实现父节点查询子节点
    DECLARE @ParentID int
    SET @ParentID='1'
    with CTEGetChild as
    (
    select * from BD_Booklet where ParentID=@ParentID
    UNION ALL
    (SELECT a.* from BD_Booklet as a inner join
    CTEGetChild as b on a.ParentID=b.ObjID
    )
    )
    SELECT * FROM CTEGetChild

    4:根据节点得到最初始的父节点(根节点)

    --公用表表达式实现子节点查询父节点
    DECLARE @ChildID int
    SET @ChildID=6
    DECLARE @CETParentID int
    select @CETParentID=ParentID FROM BD_Booklet where ObjID=@ChildID
    with CTEGetParent as
    (
    select * from BD_Booklet where ObjID=@CETParentID
    UNION ALL
    (SELECT a.* from BD_Booklet as a inner join
    CTEGetParent as b on a.ObjID=b.ParentID
    )
    )
    SELECT * FROM CTEGetParent

  • 相关阅读:
    作业2
    实验12——指针的基础应用2
    实验11——指针的基础应用
    实验十——一维数组的定义及引用
    实验九——基本数据类型存储及应用总结
    实验八--函数定义及调用总结
    实验七——函数定义及调用总结
    实验六——循环结构程序练习总结
    实验五——循环结构学习总结
    实验三——for 语句及分支结构else-if
  • 原文地址:https://www.cnblogs.com/hehuarong/p/6397781.html
Copyright © 2020-2023  润新知