Неверный синтаксис рядом (последняя строка) - PullRequest
1 голос
/ 02 апреля 2020

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

У меня такое ощущение, что это мои BEGIN / END операторы, так как я их впервые использую, но я подумал, что это сработало до того, как я перешел с SP на запрос, чтобы выполнить дополнительное тестирование. Заявления BEGIN / END выглядят хорошо для меня. Ошибка, похоже, исчезает go, когда я раскомментирую END после SET @error_message, но нет НАЧИНАЕТСЯ соответствовать этому.

Есть идеи? Это моя хранимая процедура:

USE [DB_DEV]
GO

/****** Object:  StoredProcedure [dbo].[MemberInd]    Script Date: 3/23/2020 3:37:07 PM ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[MemberInd]
AS 
    SET NOCOUNT ON

    DECLARE @error_message varchar
    SET @error_message = N'***'

    DECLARE @count_error int
    SET @count_error = 0

BEGIN
    SELECT DISTINCT 
        UMC.CID, UMC.CONCEPT_ID, UMC.STR_VALUE, M.TITLE, M.VF_01
    INTO #UMC_TMP
    FROM DB_DEV..U_MEMBER_CONCEPT UMC WITH (NOLOCK)
    LEFT JOIN DB_DEV..MEMBER M WITH (NOLOCK) ON M.CID=UMC.CID AND M.TITLE = 'RR' 
    WHERE UMC.concept_id IN (501)

    SELECT 
        T.CID, T.STR_VALUE,
        CASE
           WHEN T.TITLE = 'RR' AND (T.STR_VALUE IS NULL OR T.STR_VALUE = '') 
              THEN ISNULL(NULLIF(UPPER(T.TITLE), T.VF_01), NULL) -- Title is RR, no member in concept
           WHEN T.TITLE = 'RR' AND STR_VALUE IS NOT NULL 
              THEN 'ERROR' -- Title is RR, member ind has a value
           WHEN (T.TITLE <> 'RR' OR T.TITLE IS NULL) AND T.STR_VALUE IS NOT NULL AND T.STR_VALUE IN ('SF', 'MF') 
              THEN T.STR_VALUE -- Title is not RR, member ind has a value
           WHEN T.TITLE <> 'RR' AND (T.STR_VALUE IS NULL OR T.STR_VALUE = '') 
              THEN NULL -- Title is not RR, no member ind concept
           ELSE NULL
        END MemInd
    INTO #UPDATES
    FROM #UMC_TMP T

    --BEGIN
    UPDATE M
    SET metadata_guid= 'F1CBACCD-9053-412E-86F2-816691E54F9D',VF_01 = MemInd
    FROM #UPDATES U --WITH (NOLOCK)
    INNER JOIN DB_DEV..MEMBER M WITH (NOLOCK) ON U.CID = M.CID
    WHERE MemInd IS NOT NULL

    SET @count_error = (SELECT COUNT(*) FROM #UPDATES WHERE MemInd = 'ERROR')

    SET @error_message = (SELECT MemInd, M.CID, STR_VALUE, TITLE 
                          FROM #UPDATES U 
                          INNER JOIN DB_DEV..MEMBER M WITH (NOLOCK) ON U.CID = M.CID 
                          WHERE MemInd = 'ERROR')
--END  --this was an extra END I commented out with no BEGIN

BEGIN

IF @count_error > 0
   THROW 51000, @error_message, 1;  --gives entire error set of 'error'
END

RETURN 0

GO  --red squiggly this line, incorrect syntax line above, but it's fine...

1 Ответ

0 голосов
/ 03 апреля 2020

за @marc_s, я внес эти изменения, чтобы это исправить. Спасибо за вашу помощь, Мар c.

Я принял CASE END за BEGIN END. Мне нужно было раскомментировать эту строку:

END  --this was an extra END I commented out with no BEGIN

Кроме того, я исправил свое сообщение об ошибке следующим образом, но это не вызвало моего первоначального вопроса. Это приводило к ошибкам запуска SP, хотя:

DECLARE @error_message varchar(255) 

.. ..

SET @error_message = (SELECT CONCAT(M.CID, TITLE, MemInd) FROM #UPDATES U INNER JOIN DB_DEV..MEMBER M WITH (NOLOCK) ON U.CID=M.CID WHERE MemInd='ERROR')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...