2012-02-07 110 views
10

我想,如果它的存在是爲了刪除存儲過程,然後通過這樣的方式來創建它:當我在IF語句中使用它時,爲什麼CREATE PROCEDURE語句失敗?

IF OBJECT_ID('[dbo].[myStoredProc]') IS not NULL 
    DROP PROCEDURE dbo.myStoredProc 


CREATE PROCEDURE [dbo].[myStoredProc] 
(
    @parameter1 BIT 
) AS 

IF @parameter1 = 1 
    BEGIN 
      .... 

但抱怨說:

「CREATE PROCEDURE必須是唯一的聲明批次「

問題:我該如何解決我的腳本來解決這個問題?

回答

17

您需要在第一個邏輯批次的末尾放置一個go

IF OBJECT_ID('[dbo].[myStoredProc]') IS not NULL 
    DROP PROCEDURE dbo.myStoredProc 
go -- you need to add the batch-terminator 'go' 


CREATE PROCEDURE [dbo].[myStoredProc] 
(
    @parameter1 BIT 
) AS 

IF @parameter1 = 1 
    BEGIN 
      .. 
+0

工作!但爲什麼終止是必要的?我的意思是 – pencilCake 2012-02-07 16:33:13

+0

@pencilCake背後的邏輯因爲「CREATE PROCEDURE」語句必須是批處理中的第一條語句(且只有一條)。 – 2012-02-07 16:37:53

+0

我想知道爲什麼MS創建了這個規則......反對什麼? – pencilCake 2012-02-07 16:38:50