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

80酷酷网    80kuku.com

  存储过程|排序加贴存储过程:
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<>'swuse21cn.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://swuse.yeah.net创作

分享到
  • 微信分享
  • 新浪微博
  • QQ好友
  • QQ空间
点击: