如果条件存在,我希望更改存储过程。如果条件不满足,我想保留存储过程,因此drop / create实际上不是一个选项。
尝试将ALTER PROC的内容放入IF块中会给我带来错误。有什么想法吗?
答案 0 :(得分:6)
IF (condition)
EXEC ('ALTER PROC ...')
ALTER / CREATE PROC必须是批次中的第一个,所以这是唯一的方法。除非你这样做
IF NOT (condition)
RAISERROR('abort connection with high severity', 20, 1)
GO
ALTER PROC ...
GO
答案 1 :(得分:4)
您可以使用NOEXEC设置来执行此操作,但要小心。一旦打开NOEXEC,就必须在脚本结束时将其重新设置为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