Global SQL Procedure, System Objects and sp_ms_marksystemobject
You may come across a need to have a database of utils full of generic procedures which work on indvidual databases (say client databases).
You can't pass the database name into the procedure as a parameter and say "use @dbname" in the procedure and dynamic sql sucks.
One workaround is to create the procedure in the master database and then mark it as a system object.
eg
use [master]
create procedure sp_doThis // note the sp_ prefix is required
begin
// etc etc
end
go
exec sp_ms_marksystemobject 'sp_doThis' // second note, this procedure is undocumented, so I wouldn't be relying on this for life or death.
use [myotherdb]
exec sp_doThis
go
All done!
You can't pass the database name into the procedure as a parameter and say "use @dbname" in the procedure and dynamic sql sucks.
One workaround is to create the procedure in the master database and then mark it as a system object.
eg
use [master]
create procedure sp_doThis // note the sp_ prefix is required
begin
// etc etc
end
go
exec sp_ms_marksystemobject 'sp_doThis' // second note, this procedure is undocumented, so I wouldn't be relying on this for life or death.
use [myotherdb]
exec sp_doThis
go
All done!
Comments
Post a Comment