2010-04-20 17 views
6

Estoy buscando alterar un procedimiento almacenado si existe una condición. Quiero dejar el procedimiento almacenado como está si la condición no se cumple, por lo que drop/create no es realmente una opción.Modifique el procedimiento almacenado si se cumple la condición

Tratando de poner el contenido de ALTER PROC dentro de un bloque IF me está arrojando errores. ¿Alguna idea?

+1

¿Por qué está intentando modificar un procedimiento almacenado mediante programación? ¿Hay alguna forma de que pueda hacer que el procedimiento almacenado se base en datos de alguna manera y alterar los datos que controlan el proceso almacenado? –

+0

Debe hacerse una actualización al sproc para agregar funcionalidad adicional. La base de datos SQL utilizada estaba usando la combinación replicada. Como el sproc es un artículo replicado, drop/create no es una opción. ALTER está permitido y los cambios se replicarían. – Matt

Respuesta

6
IF (condition) 
    EXEC ('ALTER PROC ...') 

ALTER/CREATE PROC debe ser el primero en el lote, así que esta es la única manera. A menos que usted hace esto

IF NOT (condition) 
    RAISERROR('abort connection with high severity', 20, 1) 
GO 
ALTER PROC ... 

GO 
4

Puede utilizar la configuración NOEXEC para hacerlo, pero tenga cuidado. Una vez que active NOEXEC, debe volver a desactivarlo al final de su secuencia de comandos.

IF (CONDITION) 
    SET NOEXEC OFF --Enables execution of code (Default) 
ELSE 
    SET NOEXEC ON --Disables execution of code 
GO 
ALTER PROCEDURE MYPROC 
AS 
--STATEMENTS 
GO --END OF ALTER BLOCK 
SET NOEXEC OFF --RESTORES NOEXEC SETTING TO ITS DEFAULT 
Cuestiones relacionadas