первое решение:
Если вы создадите свой sp в базе данных master, отметите его как системный объект и добавите префикс «sp_», тогда будет существовать одна копия, которая будет использоваться всеми базами данных.
и второе решение из msdn:
Частные и глобальные временные хранимые процедуры, аналогичные временным таблицам, могут быть созданы с префиксами # и ##, добавленными к имени процедуры. # обозначает локальную временную хранимую процедуру; ## обозначает глобальную временную хранимую процедуру. Эти процедуры не существуют после завершения работы SQL Server.
пример:
USE master
CREATE TABLE test (c1 VARCHAR(50))
INSERT test VALUES('master')
go
CREATE PROC sp_test AS
SELECT * FROM test
GO
USE northwind
CREATE TABLE test (c1 VARCHAR(50))
INSERT test VALUES('northwind')
USE pubs
CREATE TABLE test(c1 VARCHAR(50))
INSERT test VALUES('pubs')
USE pubs
EXEC sp_test --returns 'master'
USE master
EXEC sp_MS_marksystemobject sp_test
USE pubs
EXEC sp_test --returns 'pubs'
USE northwind
EXEC sp_test --returns 'northwind'