Почему инструкция CREATE PROCEDURE терпит неудачу, когда я использую ее с инструкцией IF здесь?

Я пытаюсь DROP хранимую процедуру, если она существует, а затем СОЗДАТЬ ее, делая это следующим образом:

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 должен быть единственным выражением в партии"

Вопрос: Как я могу исправить мой script, чтобы преодолеть это?

Ответ 1

Вам нужно положить 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
             ..

Ответ 2

Добавление GO после того, как оператор IF показывает, что это конец вашей первой серии запросов.

Подробнее здесь:

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

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

Это предотвратит появление вашей ошибки.