2017-02-16 3 views
1

Update вопросИмея некоторые проблемы при создании хранимой процедуры (Неправильный синтаксис около «конец»)

Изменены соответственно хранимую процедуру, но она не возвращает никаких значений по какой-то причине, даже если я добавил ВОЗВРАТ @UserID право выше последнего END.

Update 2

Хорошо никогда не возражаю, это просто Entity Framework, который меня дразнить. Я просто попытался запустить хранимую процедуру из SSMS, и она отлично работала :)

Я копировал некоторые из моих других хранимых процедур, но каждый раз, когда мои требования к ним меняются, а также их содержимое. Не уверен, что я сделал неправильно в этот раз, может ли кто-нибудь указать мне в правильном направлении?

CREATE PROCEDURE [dbo].[GetUserID] 
( 
    -- Add the parameters for the function here 
    @UUID varchar(36), 
    @SuperID varchar(33) 
) 
AS 
BEGIN 
    SET NOCOUNT ON 
    SET ARITHABORT ON 

    DECLARE @SuperIDExists bit 
    DECLARE @UserID int 

    SELECT @SuperIDExists = CASE 
           WHEN EXISTS (SELECT * 
              FROM dbo.[Users] AS u 
              WHERE u.SuperID = @SuperID) 
            THEN CAST(1 as bit) 
            ELSE CAST(0 as bit) 
          END 

    IF @SuperIDExists = 1 
    BEGIN 
     SELECT @UserID = (SELECT u.ID 
          FROM dbo.[Users] AS u 
          WHERE u.SuperID = @SuperID) 
    END 
    ELSE 
    BEGIN 
     SELECT @UserID = (SELECT u.ID 
          FROM dbo.[Users] as U 
          WHERE u.UUID = @UUID) 
    END 

Ошибки я получаю:

Msg 102, Level 15, State 1, процедура GetUserID, строка 45 [Batch Start Line 9]
Неправильный синтаксис около 'END'

+0

Добавить еще один 'END' перед' GO'. – DVT

+0

Вам не хватает конца в последнем. Тело процедуры началось с Begin. Но нет Конец –

+0

Это сработало! Но почему? Разве не каждый КОНЕЦ сопровождается BEGIN? –

ответ

3

Вам не хватает окончательного END в вашем скрипте (до GO).

Исправленный скрипт:

CREATE PROCEDURE [dbo].[GetUserID] 
( 
    -- Add the parameters for the function here 
    @UUID varchar(36), 
    @SuperID varchar(33) 
) 
AS 
BEGIN 
SET NOCOUNT ON 
SET ARITHABORT ON 

DECLARE @SuperIDExists bit 
DECLARE @UserID int 

SELECT @SuperIDExists = 
    CASE WHEN EXISTS (
    SELECT * 
    FROM dbo.[Users] AS u 
    WHERE u.SuperID = @SuperID 
    ) 
    THEN CAST(1 as bit) 
    ELSE CAST(0 as bit) 
END 

IF @SuperIDExists = 1 
BEGIN 
    SELECT @UserID = 
    (SELECT u.ID 
    FROM dbo.[Users] AS u 
    WHERE u.SuperID = @SuperID) 
END 

ELSE 
BEGIN 
    SELECT @UserID = 
    (SELECT u.ID 
    FROM dbo.[Users] as U 
    WHERE u.UUID = @UUID) 
END 
END -- <------- ADDED `END` 

GO 
+0

Да, спасибо. Хотя сейчас у меня есть другой вопрос. Как вернуть переменную @UserID? Структура Entity сообщает мне, что хранимая процедура не возвращает никаких значений. –

+0

Я попытался добавить RETURN @UserID выше последнего END, но он все равно ничего не возвращает. –

+0

Извините, я не знаком с хранимыми процедурами SQL Server. Это было бы вопросом для кого-то другого. Я только что увидел отсутствующий «КОНЕЦ» и смог это указать. :) –

Смежные вопросы