用排序串字段实现树状结构(存储过程)

2016-01-29 17:59 12 1 收藏

用排序串字段实现树状结构(存储过程),用排序串字段实现树状结构(存储过程)

【 tulaoshi.com - ASP 】

  加贴存储过程:
if exists (select * from sysobjects where id = object_id("lybsave"))
   drop proc lybsave
CREATE PROCEDURE [lybsave] @keyid int=0,@guestname varchar(20),@guestitle varchar(100),@guestcomm
text,@guestemail varchar(50)='',@emailflag bit=0,@fromip varchar(15),@recimail varchar(50) OUTPUT
AS
DECLARE @ostr varchar(30),@rootid int,@lybid int,@ostrs varchar(30),@l tinyint,@tdt datetime,@putdate
varchar(10),@puttime varchar(5),@eflag bit
select @tdt=getdate()
select @putdate=convert(varchar(4),datepart(yy,@tdt))+'-'+left('0'+convert(varchar(2),datepart(mm,@tdt)),2)
+'-'+left('0'+convert(varchar(2),datepart(dd,@tdt)),2)
select @puttime=left('0'+convert(varchar(2),datepart(hh,@tdt)),2)+':'+left('0'+convert(varchar(2),datepart
(mi,@tdt)),2)
select @ostr='',@rootid=0,@lybid=0,@l=0
if (@guestemail='') select @emailflag=0
If @keyid=0  --发新贴
  goto newin
ELSE
begin
  SELECT @lybid=lybid,@rootid=rootid,@ostr=orderstr,@recimail=guestemail,@eflag=emailflag from guestbook
where lybid=@keyid
  IF @lybid=0  --回复贴没找到,当新贴发表
   goto newin
  ELSE
   BEGIN
    if (@eflag=0 and @guestemail<'swuse@21cn.com abc') select @recimail=''  --如果是版主回复且指定发邮件给提
问者,则不管发贴者是否要求回复,后面的abc相当于管理密码
    if (@rootid=0) select @rootid=@lybid
    select @ostrs=@ostr+'%',@lybid=0
    select top 1 @lybid=lybid,@ostrs=orderstr from guestbook where rootid=@rootid and (orderstr like
@ostrs) and lybid<@keyid order by orderstr
    if (@lybid=0) select @ostr=@ostr+char(122)
    else
     begin
      select @l=len(@ostrs)
      select @ostr=left(@ostrs,@l-1)+char(ascii(substring(@ostrs,@l,1))-1)
     end
    goto newin
   end
end

newin:
    INSERT into guestbook
(guestname,guestitle,guestcomm,putdate,puttime,guestemail,emailflag,rootid,fromip,orderstr) values
(@guestname,@guestitle,@guestcomm,@putdate,@puttime,rtrim(@guestemail),@emailflag,@rootid,@fromip,@ostr)

删贴(剪枝)存储过程:

if exists (select * from sysobjects where id = object_id("lybdel"))
   drop proc lybdel
CREATE PROCEDURE [lybdel] @keyid int
AS
DECLARE @ostr varchar(30),@rootid int,@lybid int
select @ostr='',@rootid=0,@lybid=0
SELECT @ostr=orderstr,@rootid=rootid,@lybid=lybid from guestbook where lybid=@keyid
if (@lybid<0)
  BEGIN
    if (@rootid=0) select @rootid=@lybid
    SELECT @ostr=@ostr+'%'
    DELETE FROM guestbook where orderstr like @ostr and rootid=@rootid or lybid=@rootid
  END
 

来源:http://www.tulaoshi.com/n/20160129/1503875.html

延伸阅读
标签: ASP
一、创建表 tiku_koushi if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[tiku_koushi]') and OBJECTPROPERTY (id, N'IsUserTable') = 1) drop table [dbo].[tiku_koushi] GO CREATE TABLE [dbo].[tiku_koushi] ( [id] [int] IDENTITY (1, 1) NOT NULL , [title] [varchar] (250) COLLATE Chinese_PRC_CI_AS N...
标签: Web开发
实现树状结构的两种方法1。递归法 递归是指在函数中显式的调用它自身。 利用递归法实现树状结构的特点是写入数据速度较快,显示速度较慢(在树的分支/层次较多的情况下尤其明显)。适用与写入数据量大,树的结构复杂的情况下。 数据结构(以mysql为例) 代码:------------------------------------------------------------------------------...
就用数据数据库表地址数据(中国地区) 来说吧(用Windows 请使用 gbk !!) 可直接运行(去除注解) 存储过程: DELIMITER// dropprocedureifexists findLChild// /*iid递归父节点,layer允许递归深度*/ CREATEPROCEDUREfindLChild(iidbigint(20),layerbigint(20)) BEGIN /*创建接受查询的临时表*/ createtemporar...
标签: SQLServer
-- Transfer对象的重要属性 -- 1. 属性 属性名                            类型              &nb...
标签: ASP
  一、ADO概述 ActiveX 数据对象 (ADO) 是一种既易于使用又可扩充的技术,用来将数据库访问添加到您的 Web 页可以使用 ADO 编写简洁和可升级的脚本以连接到与 OLE DB 兼容的数据源,如数据库、电子表格、顺序数据文件或电子邮件目录。OLE DB 是一个系统级的编程接口,它提供一套标准的 COM 接口,用来展示数据库管理系统的功能。使用 ADO...

经验教程

691

收藏

6
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部