CREATE  PROCEDURE LogOut
@LoginID varchar(50)AS
Begin
set nocount on
declare @LogTimes int,
@LastLogTime datetime,
@OnlineMin int,
@SCTime datetime
if exists(select * from OnLineUser where LoginID=@LoginID)
select @LastLogTime=LoginDate from OnLineUser where LoginID=@LoginID
else
set @LastLogTime=getdate()

select @OnlineMin=datediff(n,@LastLogTime,getdate())select @SCTime=LastLoginTime from [User] where LoginID=@LoginID
if @SCTime is null
set @SCTime=@LastLogTimeif datediff(n,@SCTime,@LastLogTime)>=24*60
set @LogTimes=1
else
set @LogTimes=0begin
update [User]
set LastLoginTime=@LastLogTime,
LoginTimes=LoginTimes+@LogTimes,
OnLineMin=OnLineMin+@OnlineMin
where LoginID=@LoginIDDelete from OnlineUser where LoginID=@LoginIDend
return 1
EndGO
其中,表和字段名都是正确的,并且执行也没有错误,但就是后面的
更新和删除语句不能更新和删除对应表中的数据,单条语句是可以执行的
不知是什么原因?请大家帮帮忙!

解决方案 »

  1.   

    最后
    return 1
    怎么回事,你也没有定义返回值的存储过程return做什么
      

  2.   

    还有if 语句
    IF 条件
       BEGIN
        做什么
       END
    ELSE
       BEGIN
         做什么
       END最后你的句子是,没有仔细看随便分析了下if datediff(n,@SCTime,@LastLogTime)>=24*60
    set @LogTimes=1
             这里假设成立了,程序就不执行后面的UPDATE了,哪你还set 干什么,没有地方用
    else
    set @LogTimes=0begin*******************************************这一片属于else的set @LogTimes=1的结果对这没有用
    update [User]
    set LastLoginTime=@LastLogTime,
    LoginTimes=LoginTimes+@LogTimes,
    OnLineMin=OnLineMin+@OnlineMin
    where LoginID=@LoginIDDelete from OnlineUser where LoginID=@LoginID
    **************************************************
    end
      

  3.   

    再看看前面,思维乱了套if exists(select * from OnLineUser where LoginID=@LoginID)
    select @LastLogTime=LoginDate from OnLineUser where LoginID=@LoginID
    else
    set @LastLogTime=getdate()

    select @OnlineMin=datediff(n,@LastLogTime,getdate())既然存在用户不存在,哪你还在后面处理什么在线时间,很明显你要做什么都不清晰
    不就是下线吗?if 用户存在
       begin
          存在要处理的内容
         计算时间
         UPDATE
         DEL......
       end
    else
       begin
        不存在时的内容(基本都不需要这条件,不存在就不处理)
       end
      

  4.   

    但我这样改,也还是不行啊:
    ALTER   PROCEDURE LogOut
    @LoginID varchar(50)AS
    declare @LogTimes int,
    @LastLogTime datetime,
    @OnlineMin int,
    @SCTime datetime  --上次登录时间
    set @LogTimes=0
    set @LastLogTime=getdate()
    set @OnlineMin=0
    set @SCTime=getdate()
    if exists(select * from OnLineUser where LoginID=@LoginID)
        BEGIN
    select @LastLogTime=LoginDate from OnLineUser where LoginID=@LoginID select @OnlineMin=datediff(n,@LastLogTime,getdate()) select @SCTime=LastLoginTime from [User] where LoginID=@LoginID if datediff(n,@SCTime,@LastLogTime)>=24*60
        BEGIN
    set @LogTimes=1
        END update [User]
    set LastLoginTime=@LastLogTime,
    LoginTimes=LoginTimes+@LogTimes,
    OnLineMin=OnLineMin+@OnlineMin
    where LoginID=@LoginID

    Delete from OnlineUser where LoginID=@LoginID
        END
    GO