Неправильный синтаксис рядом с другим в хранимой процедуре - PullRequest
0 голосов
/ 06 мая 2020
USE [SocialNet]
GO
/****** Object:  StoredProcedure [dbo].[sp_login]    Script Date: 5/6/2020 10:20:58 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER Procedure [dbo].[sp_login](@flag int=0, @uid varchar(50)='', @fname varchar(50)='', @lname varchar(50)='',@email varchar(50)='', @address varchar(50)='',@city varchar(50)='',@country varchar(50)='',@phonenumber varchar(50)='', @gender char(10)='',@dob varchar(50)='', @photo varchar(50)='', @secques varchar(50)='',@secans varchar(50)='', @pswd varchar(50)='', @utype char(10)='',@status bit =0)
AS
/* SET NOCOUNT ON */
BEGIN
    if(@flag=0)
        select  userid  from login where userid=@uid;
    else
    if(@flag=1)
        insert into registration(userid, firstname, lastname, email, address, city,country, phonenumber, gender, dateofbirth, photo, securityquestion, securityanswer)
        values(@uid, @fname, @lname, @email, @address, @city, @country, @phonenumber, @gender, @dob, @photo, @secques, @secans)

        insert into login(userid, password, usertype,status) 
        values(@uid,@pswd,@utype,@status)

    else     
    if (@flag=2)
        select* from login where userid=@uid and password=@pswd and status=1;    
END
RETURN

У меня есть эта хранимая процедура, и мне нужно поставить еще одну, если. Но последнее, что я поставил, говорит о неправильном синтаксисе. Не могли бы вы помочь мне с этим? Спасибо

1 Ответ

0 голосов
/ 06 мая 2020

if позволяет следовать только одному утверждению. У вас их два, поэтому else не распознается.

В T- SQL я почти всегда помещаю блоки begin / end, чтобы предотвратить такие проблемы:

if @flag = 1
begin
    insert into registration(userid, firstname, lastname, email, address, city, country, phonenumber, gender, dateofbirth, photo, securityquestion, securityanswer) 
        values (@uid, @fname, @lname, @email, @address, @city, @country, @phonenumber, @gender, @dob, @photo, @secques, @secans);
    insert into login(userid, password, usertype, status) 
        values (@uid, @pswd, @utype, @status);
end;
else if @flag = 2
begin
    select l.*
    from login l
    where userid = @uid and password = @pswd and status = 1;
end;

Обратите внимание, что я также поместил блок begin / end вокруг оператора else. Если я когда-нибудь добавлю туда новый оператор (скажем, для отладки или по какой-то другой причине), не беспокойтесь. Кроме того, я заканчивал операторы точкой с запятой.

...