Я работаю над хранимой процедурой, и когда я преобразую ее обратно из запроса в хранимую процедуру, она жалуется на «неправильный синтаксис около 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...