2012-02-07 102 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