Sample Header Ad - 728x90

How to drop a procedure across a lot of databases (SQL Server 2016)

0 votes
2 answers
1385 views
I have a simple procedure that exists in over 150 databases. I can delete them one by one, which is the most stupid work to do in the world of software development. Or I can somehow dynamically delete them all in one query, which is smart but doesn't work. I've tried: execute sp_msforeachdb 'drop procedure Usages' I got: > Cannot drop the procedure 'Usages', because it does not exist > or you do not have permission. So I thought maybe I create a cursor for it. Thus I wrote: declare @command nvarchar(max) = ' drop procedure Usages '; declare @databaseName nvarchar(100) declare databasesCursor cursor for select [name] from sys.databases where database_id > 5 open databasesCursor fetch next from databasesCursor into @databaseName while @@fetch_status = 0 begin print @databaseName execute sp_executesql @command fetch next from databasesCursor into @databaseName end close databasesCursor deallocate databasesCursor Again, I got that same message. I thought, maybe it doesn't change the context of the database, thus I prefixed the delete command with the name of the given database, so commands would become similar to drop procedure [SomeDatabase].dbo.Usages, but then I received: > 'DROP PROCEDURE' does not allow specifying the database name as a > prefix to the object name. So, I figured out to dynamically execute use @databaseName so that I can drop procedure in the context of that database. But it's not working. What should I do? I'm stuck at the smart method, and I've spent more time than the stupid method now.
Asked by Saeed Neamati (1515 rep)
Dec 6, 2019, 10:33 AM
Last activity: Jan 4, 2025, 09:21 PM