[CodeSnippet] Borrar masivamente procedimientos almacenados

Iniciamos una nueva sección en el blog, llamada Code Snippets, serán pequeñas porciones de código simples o algunas marcianas, pero que siempre son útiles, ya se para el trabajo, para preparar un demo, o un código rebuscado.

Problema: He restaurado una base de datos usando la herramienta SQL Database Publishing, para una demostración, y estoy actualizando/recreando los store procedures, y el problema era que deseaba eliminar masivamente los store procedures, que tengan un determinado patrón. Puedes eliminar los store procedures, desde SQL Server Managment Studio, haciendo clic derecho sobre el procedure, y seleccionando delete pero uno por uno, si hubiera un shift select/delete, y la otra forma, hasta donde se :$ , es haciéndolo por código, y esta es la que vamos a explotar.

Plataforma: SQL Server 2005, query a nivel de base de datos.

   1: use dbGeekProducts
   2: go
   3: DECLARE @SPs varchar(max)
   4: SET @SPs = ''
   5: SELECT @SPs = @SPs + [name] + ',' FROM sys.objects
   6: WHERE type = 'P' AND name LIKE 'usp_%'
   7:  
   8: SELECT @SPs
   9: go

En mi caso yo quiero eliminar todos los store procedures de una base de datos que empiecen con el nombre “usp_%“. El detalle de DROP PROC, es que no acepta strings o variables, si no nombres de objetos. De ahí el tip de hacer SELECT @SPs. Copio el resultado del SELECT, remuevo la última coma, y lo pego dentro del siguiente código:

   1: DROP PROC usp_Product_Insert,usp_Product....
   2: go

Si alguien tiene alguna otra o mejor forma, favor de  comentarlo :D.

P.D.: Imagino que con VS for Database Professionals, puede hacer esto con shift/control select.

Saludos,

3 comentarios en “[CodeSnippet] Borrar masivamente procedimientos almacenados”

  1. Hola Sergio!,

    bueno, aqui te dejo una solución práctica, y eviat eso de copiar y pegar el código generado para poder eliminar todos los sp de la base de datos:

    create database dbGeekProducts
    go

    use dbGeekProducts
    GO

    create proc usp_proc1
    as
    print ‘usp_proc1’
    go

    create proc usp_proc2
    as print ‘usp_proc2’
    go

    DECLARE @SPs Nvarchar(MAX)
    SET @SPs = ”
    SELECT @SPs = @SPs + [name] + ‘,’ FROM sys.objects
    WHERE type = ‘P’ AND name LIKE ‘usp_%’
    set @SPs=SUBSTRING(@SPs, 1, LEN(@SPs) – 1)
    exec (‘drop proc ‘ + @SPs )

    saludos,

    PercyReyes,

  2. Hola muchachos,

    Gracias por el script, en mi caso me genero un problema debido a que uso esquemas diferentes a dbo, para solventarlo hice lo siguiente:

    DECLARE @SPs Nvarchar(MAX)

    SET @SPs = ”

    SELECT @SPs = @SPs + S.[name]+’.’+ O.[name] + ‘,’
    FROM sys.objects O
    INNER JOIN sys.schemas S
    ON O.schema_Id=S.schema_Id

    WHERE type = ‘P’ AND O.[name] LIKE ‘usp_%’

    set @SPs=SUBSTRING(@SPs, 1, LEN(@SPs) – 1)

    exec (‘drop proc ‘ + @SPs )

    Saludos,

    Johan Cuello

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *