在存储过程中使用Return不会返回值的,稍微变更下就可以拉
CREATE PROCEDURE dbo.LogonCheck
(@UserId varchar(20),@Password varchar(20)
)
as
declare @Return_Value intif exists(
SELECT UserId,Password
FROM Customers
WHERE UserId=@UserId
AND Password=@Password
)
----return 1 -----检验成功
set @Return_Value=1if exists (
SELECT UserId,Password
FROM Customers
WHERE UserId=@UserId
AND Password<>@Password
)
-----return 0 ------密码错误
set @Return_Value=0select @Return_Value
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
CREATE PROCEDURE dbo.LogonCheck
(@UserId varchar(20),@Password varchar(20)
)
as
declare @Return_Value intif exists(
SELECT UserId,Password
FROM Customers
WHERE UserId=@UserId
AND Password=@Password
)
----return 1 -----检验成功
set @Return_Value=1if exists (
SELECT UserId,Password
FROM Customers
WHERE UserId=@UserId
AND Password<>@Password
)
-----return 0 ------密码错误
set @Return_Value=0select @Return_Value
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
那么写一句就可以了
用前边的改
CREATE PROCEDURE dbo.LogonCheck
(@UserId varchar(20),@Password varchar(20)
)
as begin
declare @Return_Value int
declare @temp_password varchar(20)
SELECT UserId,@temp_password = Password
FROM Customers
WHERE UserId=@UserId
if(@temp_password = @Password)
set @Return_Value = 1 --登陆成功
else(@temp_password is null)
set @Return_Value = -1 --不存在的用户名
else(@temp_password <> @password)
set @Return_Value = 0 --错误的密码
else
raiserror('异常错误了,即不相等,又不为空,还不是不相等了',14,1)
select @Return_Value
end如果不要-1判断最好也不要用<>@password,因为包含了null情况
所以在外围 先判断为is not null判断成功了再跳进块内来判断@password
少查询1次总是好的
CREATE PROCEDURE dbo.LogonCheck
(@UserId varchar(20),@Password varchar(20)
)
as begin
declare @Return_Value int
declare @temp_password varchar(20)
SELECT UserId,@temp_password = Password
FROM Customers
WHERE UserId=@UserId
if(@temp_password = @Password)
set @Return_Value = 1 --登陆成功
else if(@temp_password is null)
set @Return_Value = -1 --不存在的用户名
else if(@temp_password <> @password)
set @Return_Value = 0 --错误的密码
else
raiserror('异常错误了,即不相等,又不为空,还不是不相等了',14,1)
select @Return_Value
end
向变量赋值的 SELECT 语句不能与数据检索操作结合使用。
服务器: 消息 170,级别 15,状态 1,过程 LogonCheck,行 17
第 17 行: ' ' 附近有语法错误。
FROM Customers
把UserId,去掉;;;; 不好意思..要不全赋值,要不就全查询
建了个表 Customers(UserId, Password)
插入记录('admin','123456')
开查询分析器用下边的测试
----------
declare @UserId varchar(20)
declare @Password varchar(20)
set @UserId = 'admin'
set @Password = '123456'declare @Return_Value int
declare @temp_password varchar(20)SELECT @temp_password = Password
FROM Customers
WHERE UserId=@UserId if(@temp_password = @Password)
set @Return_Value = 1 --登陆成功
else if(@temp_password is null)
set @Return_Value = -1 --不存在的用户名
else if(@temp_password <> @password)
set @Return_Value = 0 --错误的密码
else
raiserror('异常错误了,即不相等,又不为空,还不是不相等了',14,1)print @Return_Value
-- select @Return_Value-------------结果 'admin','123456' -> 1
'admin','12345' ->0
'admi','1233' -> -1
'admi','123456' -> -1
那么如果改成存储过程应该没有什么问题了