[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,

Published 25/5/2008 20:23 por Sergio Tarrillo
Comparte este post:
http://geeks.ms/blogs/sergiotarrillo/archive/2008/05/25/86784.aspx

Comentarios

# re: [CodeSnippet] Borrar masivamente procedimientos almacenados

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,

Monday, May 26, 2008 7:30 AM por Percy Reyes

# re: [CodeSnippet] Borrar masivamente procedimientos almacenados

Gracias Percy, no lo había visto de esa forma :D.

Saludos,

Monday, May 26, 2008 8:14 AM por Sergio Tarrillo

# re: [CodeSnippet] Borrar masivamente procedimientos almacenados

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

Thursday, March 1, 2012 3:31 PM por johancuello@hotmail.com