WEB开发网
开发学院WEB开发ASP 用排序串字段实现树状结构(存储过程) 阅读

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

 2000-08-08 10:08:12 来源:WEB开发网   
核心提示:加贴存储过程:if exists (select * from sysobjects where id = object_id("lybsave")) drop PRoc lybsaveCREATE PROCEDURE [lybsave] @keyid int=0,@guestname varcha
加贴存储过程:
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

Tags:排序 字段 实现

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接