zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Mac下使用charles遇到的问题以及解决办法
    webp图片实践之路
    一个粗心的Bug,JSON格式不规范导致AJAX错误
    IE6/7下空div占用空间的问题
    通俗易懂的来讲讲DOM
    Javascript
    简单入门canvas
    HTML5 Boilerplate
    网页字体知识
    备战CKA每日一题——第8天 | initContainer概念、用法、使用场景简介;k8s secret env、volume考题引出
  • 原文地址:https://www.cnblogs.com/hehuarong/p/6397781.html
Copyright © 2011-2022 走看看