存储过程问题!
@mc------管理员用户名
@mm-----管理员登录密码
@result 返回参数
*/
CREATE PROCEDURE sp_denglu
@mc varchar (20),
@mm varchar(20),
@result varchar(1000) output
AS
--begin tran --事务开始
DECLARE @glyid int
declare @nowtime datetime
if exists (SELECT * FROM guanliyuan WHERE yonghuming=@mc and shanchu=0) --判断此用户名是否存在
begin
if exists (SELECT * FROM guanliyuan WHERE (yonghuming=@mc and dengmima=@mm and shanchu=0)) --判断用户名和密码是否对应
begin
select @result=( --将权限集合赋予返回值
SELECT quanxian
FROM guanliyuan
WHERE yonghuming=@mc
)
select @glyid=( --将管理员编号赋予临时变量
SELECT gly_id
FROM guanliyuan
WHERE yonghuming=@mc
)
return @glyid
--select @nowtime = GETDATE()
--execute sp_rizhi 0,0,@glyid, ' ',@nowtime, '登录 ', '登陆成功 ', ' ' --写日志
end
else
begin
select @result= '该管理员用户名和密码不匹配,登录错误! ' --返回错误信息
--execute sp_rizhi 0,0,0, ' ',@nowtime, '登录 ', '登陆失败 ', '该管理员用户名和密码不匹配,登录错误! ' --写日志
end
end
else
begin
select @result= '该管理员用户名不存在,登录错误! ' --返回错误信息
--execute sp_rizhi 0,0,0, ' ',@nowtime, '登录 ', '登陆失败 ', '该管理员用户名不存在,登录错误! ' --写日志
end
--commit tran----事务提交
GO
这是登陆时调用的存储过程,现在的问题,guanliyuan表中现在有二个用户名一样,比如 test,但是一个被假删了,shanchu=1,这是用test登陆出现下面的问题,
Microsoft OLE DB Provider for ODBC Drivers 错误 '80004005 '
[Microsoft][ODBC SQL Server Driver][SQL Server]子查询返回的值多于一个。当子查询跟随在 =、!=、 <、 <=、> 、> = 之后,或子查询用作表达式时,这种情况是不允许的。
然后
if exists (SELECT top 1 * FROM guanliyuan WHERE yonghuming=@mc and shanchu=0 order by id desc) 这样也不对,!
怎么解决,各位
------解决方案--------------------select @result=( --将权限集合赋予返回值
SELECT quanxian
FROM guanliyuan
WHERE yonghuming=@mc
)
select @glyid=( --将管理员编号赋予临时变量
SELECT gly_id
FROM guanliyuan
WHERE yonghuming=@mc
)
是不是这里的问题啊
------解决方案--------------------你在查询分析器里试验一下