树形结构的数据库实现,存储过程实现添加删除查询功能
来源:互联网 发布:前端数据渲染 编辑:程序博客网 时间:2024/05/17 06:42
USE [JPKCDB]
GO
/****** Object: StoredProcedure [dbo].[BbsDelete] Script Date: 2015/11/19 23:32:09 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[BbsDelete]
(
@ID INT
)
AS
DECLARE @LID AS INT, @RID AS INT, @WID AS INT, @DID AS INT, @NUM as int
set @NUM=0
SET @DID = 0
SELECT @DID = ID, @LID = LID, @RID = RID, @WID = RID - LID + 1 FROM Bbs WHERE ID = @ID
IF @DID != 0
BEGIN
select @NUM=@WID/2
DELETE FROM Bbs WHERE LID BETWEEN @LID AND @RID
UPDATE Bbs SET RID = RID - @WID WHERE RID > @RID
UPDATE Bbs SET LID = LID - @WID WHERE LID > @RID
update Bbs set ID=ID-@NUM where ID>@ID
update Bbs set FID=FID-@NUM where FID>@ID
END
SELECT @DID
USE [JPKCDB]
GO
/****** Object: StoredProcedure [dbo].[BbsInsert] Script Date: 2015/11/19 23:32:39 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[BbsInsert]
(
@Root INT,
@tieName nvarchar(100),
@bbsTitle nvarchar(50),
@detail nvarchar(2000),
@pubTime nchar(19),
@publisherId INT,
@tp INT,
@did INT,
@state INT
)
AS
DECLARE @LID AS INT,@RID AS INT,@NID AS INT,@Tree AS INT,@NkID AS INT,@CNT AS INT
SET @LID=0
SET @RID = 1
SET @NID = 0
SET @Tree = 0
SET @CNT=0
-- 表中为空,没有树根节点,则先插入树根节点
set @nkid=(select count(*)+1 from Bbs)
IF (@nkid=1)
BEGIN
INSERT INTO Bbs(id,LID,RID,Tree,fid,tieName,bbsTitle,detail,pubTime,publisherId,tp,did,state) VALUES (0,1,2,0,-1,@tieName,@bbsTitle,@detail,@pubTime,@publisherId,@tp,@did,@state)
END
ELSE
BEGIN
--在根节点下插入
SELECT @LID=LID,@RID = RID, @Tree = Tree + 1
FROM Bbs WHERE ID = @Root
SET @NID=@ROOT+(@RID-@LID+1)/2
UPDATE Bbs SET RID = RID + 2 WHERE RID >= @RID
UPDATE Bbs SET LID = LID + 2 WHERE LID > @RID
UPDATE Bbs SET ID = ID + 1 WHERE LID > @RID
UPDATE Bbs SET fID = fID + 1 WHERE fid> @root AND RID>@RID
INSERT INTO Bbs(id,LID,RID,Tree,fid,tieName,bbsTitle,detail,pubTime,publisherId,tp,did,state) VALUES (@NID,@RID,@RID + 1,@Tree,@root,@tieName,@bbsTitle,@detail,@pubTime,@publisherId,@tp,@did,@state)
SET @NkID = SCOPE_IDENTITY()
SELECT @NkID
END
USE [JPKCDB]
GO
/****** Object: StoredProcedure [dbo].[BbsSelect] Script Date: 2015/11/19 23:32:51 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[BbsSelect]
-- Add the parameters for the stored procedure here
@Root INT,
@Tree INT
AS
BEGIN
SELECT *
FROM Bbs AS Z,Bbs AS P
WHERE P.ID=@Root
AND Z.LID>=P.LID AND Z.RID <=P.RID
AND (@Tree = 0 OR Z.Tree<=P.Tree+@Tree)
ORDER BY Z.LID ASC
END
GO
/****** Object: StoredProcedure [dbo].[BbsDelete] Script Date: 2015/11/19 23:32:09 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[BbsDelete]
(
@ID INT
)
AS
DECLARE @LID AS INT, @RID AS INT, @WID AS INT, @DID AS INT, @NUM as int
set @NUM=0
SET @DID = 0
SELECT @DID = ID, @LID = LID, @RID = RID, @WID = RID - LID + 1 FROM Bbs WHERE ID = @ID
IF @DID != 0
BEGIN
select @NUM=@WID/2
DELETE FROM Bbs WHERE LID BETWEEN @LID AND @RID
UPDATE Bbs SET RID = RID - @WID WHERE RID > @RID
UPDATE Bbs SET LID = LID - @WID WHERE LID > @RID
update Bbs set ID=ID-@NUM where ID>@ID
update Bbs set FID=FID-@NUM where FID>@ID
END
SELECT @DID
USE [JPKCDB]
GO
/****** Object: StoredProcedure [dbo].[BbsInsert] Script Date: 2015/11/19 23:32:39 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[BbsInsert]
(
@Root INT,
@tieName nvarchar(100),
@bbsTitle nvarchar(50),
@detail nvarchar(2000),
@pubTime nchar(19),
@publisherId INT,
@tp INT,
@did INT,
@state INT
)
AS
DECLARE @LID AS INT,@RID AS INT,@NID AS INT,@Tree AS INT,@NkID AS INT,@CNT AS INT
SET @LID=0
SET @RID = 1
SET @NID = 0
SET @Tree = 0
SET @CNT=0
-- 表中为空,没有树根节点,则先插入树根节点
set @nkid=(select count(*)+1 from Bbs)
IF (@nkid=1)
BEGIN
INSERT INTO Bbs(id,LID,RID,Tree,fid,tieName,bbsTitle,detail,pubTime,publisherId,tp,did,state) VALUES (0,1,2,0,-1,@tieName,@bbsTitle,@detail,@pubTime,@publisherId,@tp,@did,@state)
END
ELSE
BEGIN
--在根节点下插入
SELECT @LID=LID,@RID = RID, @Tree = Tree + 1
FROM Bbs WHERE ID = @Root
SET @NID=@ROOT+(@RID-@LID+1)/2
UPDATE Bbs SET RID = RID + 2 WHERE RID >= @RID
UPDATE Bbs SET LID = LID + 2 WHERE LID > @RID
UPDATE Bbs SET ID = ID + 1 WHERE LID > @RID
UPDATE Bbs SET fID = fID + 1 WHERE fid> @root AND RID>@RID
INSERT INTO Bbs(id,LID,RID,Tree,fid,tieName,bbsTitle,detail,pubTime,publisherId,tp,did,state) VALUES (@NID,@RID,@RID + 1,@Tree,@root,@tieName,@bbsTitle,@detail,@pubTime,@publisherId,@tp,@did,@state)
SET @NkID = SCOPE_IDENTITY()
SELECT @NkID
END
USE [JPKCDB]
GO
/****** Object: StoredProcedure [dbo].[BbsSelect] Script Date: 2015/11/19 23:32:51 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[BbsSelect]
-- Add the parameters for the stored procedure here
@Root INT,
@Tree INT
AS
BEGIN
SELECT *
FROM Bbs AS Z,Bbs AS P
WHERE P.ID=@Root
AND Z.LID>=P.LID AND Z.RID <=P.RID
AND (@Tree = 0 OR Z.Tree<=P.Tree+@Tree)
ORDER BY Z.LID ASC
END
0 0
- 树形结构的数据库实现,存储过程实现添加删除查询功能
- 存储过程实现BBS树形结构
- 页面中用实现的树形结构 《添加,删除,添加全部,删除全部》
- 使用Oracle数据库实现树形结构表的子-父级递归查询和删除,通过级联菜单简单举例
- MySql的sql语句中添加存储过程或者存储函数来实现Oracle中的start with ……connect by prior……递归(树形结构数据)查询
- 树形菜单的二叉链表实现--数据库实现(增删改存储过程实现)
- 利用存储过程实现查询功能
- mysql 树形结构查询(存储过程)
- 数据库sql的查询统计问题 用存储过程实现;
- 存储过程实现SQL2005查询Access数据库
- 存储过程实现SQL2005查询Access数据库
- 取出所有树形结构父节点下的子节点(用存储过程实现)
- MySQL 存储过程实现 id-pid结构的树形数据展示
- 树形结构的实现
- 树形结构的实现
- 树形结构的实现
- 使用postgre数据库实现树形结构表的子-父级迭代查询,通过级联菜单简单举例
- 顺序存储结构的基本操作实现(以类的方式实现)----插入、删除、查询
- Linux的touch命令使用
- 牛客网 | 表示数值的字符串
- TreeSet排序树
- C#if if else笔记
- HDU ACM 1051 Wooden Sticks
- 树形结构的数据库实现,存储过程实现添加删除查询功能
- linux mysql免安装版
- HDU 4764 Stone(博弈)
- linux系统查看、修改IP、网关、DNS的方法
- WebKit之NPAPI插件
- 文字排版(C程序设计进阶第5周)
- Android Fragment 真正的完全解析(下)
- lua 垃圾回收标记函数 reallymarkobject
- codeblocks 多线程编程时出现:对pthread_create未定义的引用,解决方法