日期:2014-05-17  浏览次数:20818 次

存储过程问题!
@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
)

是不是这里的问题啊
------解决方案--------------------
你在查询分析器里试验一下