2010-04-20 93 views
6

如果存在條件,我期待更改存儲過程。如果條件不滿足,我想離開存儲過程,所以drop/create不是真正的選擇。如果條件得到滿足,則更改存儲過程

試圖把ALTER PROC的內容放在IF塊裏面會給我帶來錯誤。有什麼想法嗎?

+1

你爲什麼試圖以編程方式改變存儲過程?有沒有辦法以某種方式使存儲過程數據驅動,並改變驅動存儲過程的數據? – 2010-04-20 18:20:29

+0

需要對sproc進行更新以添加附加功能。使用的SQL數據庫使用合併複製。由於sproc是複製的文章,drop/create不是一個選項。 ALTER被允許並且更改將被複制。 – Matt 2013-03-11 12:56:15

回答

6
IF (condition) 
    EXEC ('ALTER PROC ...') 

ALTER/CREATE PROC必須是批處理中的第一個,所以這是唯一的方法。除非你這樣做

IF NOT (condition) 
    RAISERROR('abort connection with high severity', 20, 1) 
GO 
ALTER PROC ... 

GO 
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 
相關問題