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
其中,表和字段名都是正确的,并且执行也没有错误,但就是后面的
更新和删除语句不能更新和删除对应表中的数据,单条语句是可以执行的
不知是什么原因?请大家帮帮忙!
@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
其中,表和字段名都是正确的,并且执行也没有错误,但就是后面的
更新和删除语句不能更新和删除对应表中的数据,单条语句是可以执行的
不知是什么原因?请大家帮帮忙!
return 1
怎么回事,你也没有定义返回值的存储过程return做什么
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
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
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