Ошибка хранимой процедуры - неверный синтаксис рядом с другим - PullRequest
0 голосов
/ 24 марта 2020

Я работаю над своей первой хранимой процедурой, и она показывает ошибку в другом месте (где у меня есть комментарий в другом месте ниже). Если кто-нибудь знает, как я могу исправить ошибку, буду признателен. Я пытался смотреть в Интернете, и я думаю, что это может иметь отношение к моему началу / концу и если / еще позиционирования. У меня проблемы с поиском подобного примера, хотя.

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE procedure [dbo].[SPName]
    @userid NVARCHAR(51)
AS 
    SET NOCOUNT ON

    DECLARE @return_status  INT

    IF @userid IS NULL OR @userid = 0
    BEGIN
        --fail
        SET @return_status = 1
    END

    IF  @return_status <> 1
    BEGIN
        IF EXISTS (SELECT login
                   FROM dbo.user_table
                   WHERE (@userid = login))
        --continue because its a good user
        ELSE  
            -- this is where it doesn't like the else
            SET @return_status = 1
    END

    BEGIN
        UPDATE dbo.U_MEMBER
        SET dbo.U_MEMBER.inac = 1,
            dbo.U_MEMBER.reg = @userid
        FROM dbo.U_MEMBER
        WHERE U_MEMBER.VF = 'REV'
    END

    RETURN 0

Ответы [ 2 ]

1 голос
/ 24 марта 2020

Инициализируйте переменную @return_status, например:

DECLARE @return_status  INT

--Initialize the variable with the expected value
SET @return_status = 0

IF @userid IS NULL OR @userid = 0
BEGIN
--fail
    SET @return_status=1
END
1 голос
/ 24 марта 2020

Оператор IF не имеет ничего общего, если он равен true:

IF  @return_status <> 1
BEGIN
    IF EXISTS(select login from dbo.user_table where  (@userid=login))
        --continue because its a good user
    ELSE  --this is where it doesn't like the else
        set @return_status = 1
    END
...

Это синтаксически неверно. T SQL ожидает выполнения оператора, если IF возвращает true, и в этом случае комментария недостаточно.

Если вам не нужно ничего делать, если оператор верен, вместо этого просто переключитесь на IF NOT EXISTS:

IF  @return_status <> 1
BEGIN
    IF NOT EXISTS(select login from dbo.user_table where  (@userid=login))
    BEGIN
        set @return_status = 1
    END
...

В противном случае, если вы хотите использовать как истинные, так и ложные результаты оператора IF:

IF  @return_status <> 1
BEGIN
    IF EXISTS(select login from dbo.user_table where  (@userid=login))
    BEGIN
        -- Do something with the true outcome
    END
    ELSE
    BEGIN
        set @return_status = 1
    END
...
...