当我在这里使用IF语句时,为什么CREATE PROCEDURE语句失败?

时间:2012-02-07 16:27:24

标签: sql-server-2008 tsql batch-file

我正在尝试删除存储过程(如果存在),然后通过以下方式创建它:

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必须是批次中的唯一声明”

问题:如何修复我的脚本以克服这个问题?

2 个答案:

答案 0 :(得分: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
             ..

答案 1 :(得分:8)

IF语句后添加 GO ,表明这是您第一个查询批次的结束。

在这里阅读更多内容:

http://msdn.microsoft.com/en-us/library/ms188037.aspx

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

这可以防止您的错误发生。