Member 13138564 Ответов: 1

Как написать код ?


Мне нужно написать хранимую процедуру, где есть клиентские правила, если они не удовлетворены, то она должна выводиться как ошибка и пропускать блок..

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

Я пробовал GOTO, но в хранимой процедуре я получаю ошибку...

Dave Kreskowiak

Вы не показали хранимую процедуру, что эта штука должна делать, ошибку, которую вы получаете, ... ничего! Как вы думаете, кто-нибудь вам поможет?

Member 13138564

ИЗМЕНИТЬ ПРОЦЕДУРУ USP_FONM_16_FILES
(
@COMMAND NVARCHAR (МАКС) ,
@DBNAME NVARCHAR(МАКС) ,
@FORMAT_TABLE NVARCHAR (МАКС.)
)

АС
НАЧАТЬ

ЕСЛИ @КОМАНДА =Н'HOMEOWNER'

НАЧАТЬ

ОБЪЯВИТЬ @ERR_MESSAGE VARCHAR(MAX)
ОБЪЯВИТЬ @SQL1 NVARCHAR (MAX)

SET @SQL1=N"+

ФУНКЦИЯ CONCAT('ЕСЛИ (ВЫБРАТЬ МАКСИМУМ(ЭТО) С ', @FORMAT_TABLE ,')=', "'Д"','
НАЧАТЬ
ВЫБЕРИТЕ ТОП-100* ИЗ ', @FORMAT_TABLE , '
КОНЕЦ
ЕЩЕ
НАЧАТЬ
SET @ERR_MESSAGE= "НЕДОСТУПНО"
RAISERROR(@ERR_MESSAGE, 16, 1)
Конец'
)
КОНЕЦ

ПЕЧАТЬ 'DECLARE @ERR_MESSAGE NVARCHAR(MAX)'
PRINT @SQL1
EXEC (@SQL1)
КОНЕЦ
--запустить процедуру
ошибка
Msg 137, Уровень 15, Состояние 1, Строка 49
Необходимо объявить скалярную переменную "@ERR_MESSAGE".
Msg 137, Уровень 15, Состояние 2, Строка 50

1 Ответов

Рейтинг:
7

OriginalGriff

Все дело в области видимости: @ERR_MESSAGE объявляется внутри блока IF и доступен внутри блока ELSE. Переместите объявление в верхнюю часть SP, и ошибка исчезнет.


Member 13138564

Спасибо, приятель..

OriginalGriff

Всегда пожалуйста!