Member 13138564 Ответов: 1

Почему я получаю ошибку goto..


Я получаю ошибку Goto, даже если я помечен..

Msg 133, Уровень 15, Состояние 1, Строка 79
Оператор GOTO ссылается на метку "ERROR_HANDLER", но эта метка не была объявлена.

Обработчик ошибок отображает таблицу формата проверки в конце она работает нормально, но так как goto выбрасывает ошибку в error_handler Nodups не должны были быть напечатаны и созданы.

Заранее спасибо.

Что я уже пробовал:

-------- FONM --------

ALTER PROCEDURE USP_FONM_16_FILES
(
@COMMAND NVARCHAR (MAX) 		,
@DBNAME NVARCHAR(MAX) 			,
@FORMAT_TABLE NVARCHAR (MAX) 	,
@FORMAT_NODUPS NVARCHAR (MAX)	--,
--@MAX_IDENTITY NVARCHAR (MAX)
)

AS 
BEGIN 

IF @COMMAND =N'HOMEOWNER'

BEGIN

DECLARE @SRC_HM_DATA_TYPE NVARCHAR(MAX)
SET @SRC_HM_DATA_TYPE=N''+
CONCAT('
BEGIN
IF EXISTS (SELECT [SRC_HM],DATA_TYPE FROM ',@DBNAME,'..',@FORMAT_TABLE,' WHERE [SRC_HM]=''1'' AND DATA_TYPE=''D'')
   PRINT ''SRC_HM=1 AND DATA_TYPE = D''
ELSE
GOTO ERROR_HANDLER;
END'
)
END

Begin
DECLARE @ERROR_HANDLER NVARCHAR(MAX)
SET @ERROR_HANDLER=N''+
CONCAT
(
	'ERROR_HANDLER:',
'
	Print ''check format table '''
)
End
BEGIN

DECLARE @REMOVE_NODUPS NVARCHAR (MAX)
PRINT '-- REMOVE DUPLICATES -- '		
SET @REMOVE_NODUPS=N''+

CONCAT(
	'IF OBJECT_ID (','''',@FORMAT_NODUPS,'''',',','''','U','''',') IS NOT NULL DROP TABLE ', @DBNAME,'..',@FORMAT_NODUPS
		,'
;WITH SAMPLECTE
AS 
(
	SELECT A.*, ROW_NUMBER () OVER ( PARTITION BY FIRST_NAME, LAST_NAME, ADDRESS, ZIP ORDER BY FIRST_NAME ) AS RNUM
	FROM ', @DBNAME,'..',@FORMAT_TABLE,' A
)
SELECT * INTO ', @DBNAME,'..',@FORMAT_NODUPS,'
FROM SAMPLECTE WHERE RNUM=1'
	)
END
		
	PRINT @SRC_HM_DATA_TYPE
	EXEC (@SRC_HM_DATA_TYPE)
	PRINT @REMOVE_NODUPS
	EXEC (@REMOVE_NODUPS)
	PRINT @ERROR_HANDLER
	EXEC (@ERROR_HANDLER)

END	

-- Output --

-- REMOVE DUPLICATES -- 

BEGIN
IF EXISTS (SELECT [SRC_HM],DATA_TYPE FROM prac..test_format1 WHERE [SRC_HM]='1' AND DATA_TYPE='D')
   PRINT 'SRC_HM=1 AND DATA_TYPE = D'
ELSE
GOTO ERROR_HANDLER;
END
Msg 133, Level 15, State 1, Line 77
A GOTO statement references the label 'ERROR_HANDLER' but the label has not been declared.
IF OBJECT_ID ('Test_format_nodups','U') IS NOT NULL DROP TABLE prac..Test_format_nodups
;WITH SAMPLECTE
AS 
(
	SELECT A.*, ROW_NUMBER () OVER ( PARTITION BY FIRST_NAME, LAST_NAME, ADDRESS, ZIP ORDER BY FIRST_NAME ) AS RNUM
	FROM prac..test_format1 A
)
SELECT * INTO prac..Test_format_nodups
FROM SAMPLECTE WHERE RNUM=1

(5 rows affected)
ERROR_HANDLER:
	Print 'check format table '
check format table 

--its working

CHill60

Error_Handler не объявляется в SQL @SRC_HM_DATA_TYPE, который запускается в отдельном сеансе для @ERROR_HANDLER

Member 13138564

Как ее решить ?

1 Ответов

Рейтинг:
2

CHill60

Я не видел вашего ответа, так как вы не использовали слово "ответить", иначе я бы ответил на этот вопрос раньше.

Объедините все SQL-файлы в один Exec...

DECLARE @FinalSQL NVARCHAR(MAX)
SET @FinalSQL = @SRC_HM_DATA_TYPE + ' ' + @REMOVE_NODUPS + ' ' + @ERROR_HANDLER
EXEC (@FinalSQL)
Эти места могут быть не нужны, но не причиняют никакого вреда