在最近老是用到這個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