日期:2014-05-18  浏览次数:20481 次

为什么这个小的存储过程无论输入什么都返回登陆成功?
create                             PROCEDURE   MCLoginInit    
(@empcode   varchar(12),     --操作员代码
@emppwd   varchar(64),     --用户输入密码
@notice   varchar(150)   output,
@result   int   output)
AS
declare   @mm   varchar(100)
if   (@empcode   is   null)   or   (ltrim(rtrim(@empcode))= ' ')
begin
set   @notice   =   '操作员或密码不能为空 '
set   @result   =   -1
return   --输入操作员代码为空,返回
end

select   @mm   =   pdamm   from   sys_users   where   dm   =   @empcode

print(ltrim(rtrim(@empcode)))
print(@mm)

if   ltrim(rtrim(@empcode)) <> @mm
goto   err_exit

set   @notice   =   '登陆成功 '
set   @result   =   0
return   --输入操作员代码为空,返回

err_exit:
print( 'error ')
set   @notice   =   '密码错误 '
set   @result   =   -1
return   --密码错误,返回


GO
SET   QUOTED_IDENTIFIER   OFF  
GO
SET   ANSI_NULLS   ON  
GO



------解决方案--------------------
--try


create PROCEDURE MCLoginInit
(
@empcode varchar(12), --操作员代码
@emppwd varchar(64), --用户输入密码
@notice varchar(150) output,
@result int output
)
AS
declare @mm varchar(100)
if (@empcode is null) or (ltrim(rtrim(@empcode))= ' ')
begin
set @notice = '操作员或密码不能为空 '
set @result = -1
return --输入操作员代码为空,返回
end

select @mm = pdamm from sys_users where dm = @empcode

print(ltrim(rtrim(@empcode)))
print(@mm)

if ltrim(rtrim(@empcode))=@mm
begin
set @notice = '登陆成功 '
set @result = 0
return --输入操作员代码为空,返回
end
else
begin
set @notice = '密码错误 '
set @result = -1
return --密码错误,返回
end


GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
------解决方案--------------------
create PROCEDURE MCLoginInit
(@empcode varchar(12), --操作员代码
@emppwd varchar(64), --用户输入密码
@notice varchar(150) output,
@result int output)
AS
declare @mm varchar(100)
if (@empcode is null) or (ltrim(rtrim(@empcode))= ' ')
begin
set @notice = '操作员或密码不能为空 '
set @result = -1
return --输入操作员代码为空,返回
end

select @mm = pdamm from sys_users where dm = @empcode

if ltrim(rtrim(@empcode)) <> @mm
goto err_exit
else
begin
set @notice = '登陆成功 '
set @result = 0
return --输入操作员代码为空,返回
end

err_exit:
print( 'error ')
set @notice = '密码错误 '
set @result = -1
return --密码错误,返回

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO


------解决方案--------------------
欧耐心不足,看不完就头疼
------解决方案--------------------
goto err_exit 后面要加else
不然
if ltrim(rtrim(@empcode)) <> @mm
goto err_exit
这句判断不管成不成立都会继续执行后面的语句

set @notice = '登陆成功 '
set @result = 0