Заменить хранимую процедуру, если выполнено условие
Я хочу изменить хранимую процедуру, если условие существует. Я хочу оставить хранимую процедуру как есть, если условие не выполнено, поэтому drop / create на самом деле не вариант.
Попытка поместить содержимое ALTER PROC внутри блока IF вызывает ошибки для меня. Есть предположения?
IF (condition) EXEC ('ALTER PROC ...')
ALTER / CREATE PROC должен быть первым в пакете, так что это единственный способ. Если вы этого не сделаете
IF NOT (condition) RAISERROR('abort connection with high severity', 20, 1) GO ALTER PROC ... GO
Вы можете использовать настройку NOEXEC для этого, но будьте осторожны. Когда вы включите NOEXEC ON, вы должны повернуть его обратно в положение OFF в конце вашего сценария.
IF (CONDITION) SET NOEXEC OFF --Enables execution of code (Default) ELSE SET NOEXEC ON --Disables execution of code GO ALTER PROCEDURE MYPROC AS --STATEMENTS GO --END OF ALTER BLOCK SET NOEXEC OFF --RESTORES NOEXEC SETTING TO ITS DEFAULT