在存储过程中使用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

解决方案 »

  1.   

    用户不存在就为不返回,有用户且密码正确就返回1,由用户密码错误就返回0-密码错误?
    那么写一句就可以了
    用前边的改 
    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次总是好的
      

  2.   

    不好意思,,前边有else 忘记+if了 失误
    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
      

  3.   

    不行啊,有以下的错误:服务器: 消息 141,级别 15,状态 1,过程 LogonCheck,行 13
    向变量赋值的 SELECT 语句不能与数据检索操作结合使用。
    服务器: 消息 170,级别 15,状态 1,过程 LogonCheck,行 17
    第 17 行: ' ' 附近有语法错误。
      

  4.   

    SELECT UserId,@temp_password = Password
    FROM Customers
    把UserId,去掉;;;; 不好意思..要不全赋值,要不就全查询
      

  5.   

    17 行应该没有问题啊 ---可能是前边代到错了
    建了个表 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
    那么如果改成存储过程应该没有什么问题了
         
      

  6.   

    谢谢了::>lieshengren(风中柳絮水中萍)