2012-02-07 10 views
10

estoy tratando de eliminar un procedimiento almacenado si es que existe y luego crearlo haciendo de esta manera:¿Por qué falla la instrucción CREATE PROCEDURE cuando la uso con la declaración IF aquí?

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


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

IF @parameter1 = 1 
    BEGIN 
      .... 

Pero se queja de que:

"CREATE procedimiento debe ser la única declaración en el lotes"

pregunta: ¿Cómo puedo arreglar mi script para superar esto?

Respuesta

17

Debe poner un go al final de su primer lote lógico.

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

¡Funcionó! Pero, ¿por qué es necesario terminar? Me refiero a la lógica detrás de – pencilCake

+0

@pencilCake Porque la declaración 'CREATE PROCEDURE' tiene que ser la primera declaración (y solo una) en un lote. –

+0

Me pregunto por qué MS creó esta REGLA ... ¿Contra qué? ... – pencilCake

8

Adición GO después de su declaración IF muestra que este es el final de su primer lote de consultas.

leer más aquí:

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

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

Esto evitará que su error se produzca.

Cuestiones relacionadas