您的位置:首页技术开发ASP技巧 → 用排序串字段实现树状结构(存储过程)

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

时间:2004/11/7 4:02:00来源:本站整理作者:蓝点我要评论(0)

加贴存储过程

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


相关阅读 Windows错误代码大全 Windows错误代码查询激活windows有什么用Mac QQ和Windows QQ聊天记录怎么合并 Mac QQ和Windows QQ聊天记录Windows 10自动更新怎么关闭 如何关闭Windows 10自动更新windows 10 rs4快速预览版17017下载错误问题Win10秋季创意者更新16291更新了什么 win10 16291更新内容windows10秋季创意者更新时间 windows10秋季创意者更新内容kb3150513补丁更新了什么 Windows 10补丁kb3150513是什么

文章评论
发表评论

热门文章 没有查询到任何记录。

最新文章 VB.NET 2005编写定时关 Jquery get/post下乱码解决方法 前台gbk gb如何使用数据绑定控件显示数据ASP脚本循环语句ASP怎么提速

人气排行 轻松解决"Server Application Error"和iis"一起学习DataGridView调整列宽用ASP随机生成文件名的函数Jquery get/post下乱码解决方法 前台gbk gbODBC Drivers错误80004005的解决办法返回UPDATE SQL语句所影响的行数的方法用Javascript隐藏超级链接的真实地址两个不同数据库表的分页显示解决方案