Вы можете создать хранимую процедуру в master
, которая будет выполняться в текущем контексте базы данных , если , вы добавите префикс хранимой процедуры к sp
.Вот пример:
USE master
GO
CREATE DATABASE Test1 --for demo purposes
GO
CREATE PROCEDURE dbo.sp_DoStuff
AS
SET NOCOUNT ON
SELECT DB_NAME()
GO
USE Test1
GO
EXEC dbo.sp_DoStuff
GO
USE msdb
GO
EXEC dbo.sp_DoStuff
GO
USE master
GO
DROP DATABASE Test1
DROP PROCEDURE dbo.sp_DoStuff
GO
Это, конечно, то, почему вы обычно не создаете сохраненные пользователем процессы с запуском sp
... движок пытается разрешить имя в master
Вы можете положиться на отложенное разрешение имен, чтобы не выдавать ошибку для ваших несуществующих таблиц в master