Come rimuovere tutte le Stored Procedure da un database SQL Server?
In questi giorni sto lavorando sui database SQL Server che fanno da back-end ai nostri web services e ne approfitto per fare un po’ manutenzione straordinaria. Stamattina mi è capitato di dover cancellare tutte le Stored Procedure di un database e ho scovato questa routine che mi ha fatto risparmiare un mucchio di tempo
1 2 3 4 5 6 7 8 9 10 11 12 13 | declare @procName varchar (500) declare cur cursor for select [ name ] from sys.objects where type = 'p' open cur fetch next from cur into @procName while @@fetch_status = 0 begin exec ( 'drop procedure ' + @procName) fetch next from cur into @procName end close cur deallocate cur |
La tecnica è quella di sfruttare la tabella di sistema sys.objects che elenca tutti gli oggetti contenuti nel database. Le Stored Procedure hanno tutte type = ‘P’ per cui è facile individuarle. A questo punto ci sono due possibilità: memorizzarne i nomi in una tabella temporanea per poi lanciare un loop che le cancelli una per una, oppure usare un cursore ed eseguire le cancellazioni con la funzione EXEC. La nostra routine usa il secondo approccio, senz’altro più performante.