存储过程中关键字else附近的语法不正确

时间:2017-09-23 15:37:05

标签: sql procedure

create proc login
    (@id int out,
     @email varchar(30),
     @passsword varchar(30),
     @type varchar(30) out)
as
begin
    select 
        @id = id, @type = type 
    from 
        registration 
    where 
        email = @email 
        and password = @password

    return 0
end
else
begin
    return 1
end

1 个答案:

答案 0 :(得分:0)

据推测,你正在寻找这个:

create procedure usp_login (
    @email varchar(30),
    @passsword varchar(30),
    @id int output,
    @type varchar(30) output
) as
begin
    set @id = NULL;

    select @id = id, @type = type
    from registration
    where email = @email and password = @password;

    return (case when @id is null then 0 else 1 end);
end;

一些注意事项:

  • 您的代码表明您使用的是未加密的密码。这是你需要学习如何修复的第一件事。
  • else - 正如评论中所述 - 需要if
  • 当你混合输入和输出参数时,我更喜欢将output参数作为最后一个参数。这是一个偏好的问题。但是,我认为将所有输入和所有输出结合在一起是好的做法 - 除非你有充分的理由。
  • 以分号结束陈述。
  • 使用存储过程的返回值实际上是最佳实践。但是,没有必要。