如何创建实用程序存储过程并像其他sp _...实用程序一样运行它

时间:2010-07-29 16:21:20

标签: sql-server sql-server-2005 tsql

我需要在数据库服务器上创建一个一次且只在一个地方的存储过程,但是能够从任何数据库运行它。 但是,我不希望每次运行时都要输入{​​{1}}。我希望能够像内置程序一样使用它:database.schema.procedure_name有没有办法做到这一点?

这是我正在尝试创建的过程:

sp_...

以下是我想从SQL Server Management Studio运行它的方法:

--actual procedure is more complex
CREATE PROCEDURE TestProcedure
AS

select * from sys.dm_exec_requests 

go

然而,你得到这个错误:

EXEC TestProcedure
--or 
TestProcedure

如果我用以下方式运行它,一切运行正常:

Msg 2812, Level 16, State 62, Line 1
Could not find stored procedure 'TestProcedure'.

你可以运行这样的系统程序而不会出现任何错误:

EXEC master.dbo.TestProcedure
--or
master.dbo.TestProcedure

1 个答案:

答案 0 :(得分:5)

只需在master数据库中创建它并为其指定sp_前缀即可。 SQL Server始终首先检查master数据库中是否存在具有此前缀的存储过程(以及其他类型的对象)。

它将为您及以下处理数据库上下文。

USE master

create proc [dbo].[sp_test] as
select db_name()

GO

USE YourDB

EXEC master..sp_test  /*Returns "master"*/
EXEC sp_test          /*Returns "YourDB"*/

修改

跟随Cade的评论,将其标记为系统程序。这似乎可能需要in some circumstances。在SQL 2005+中,您将使用

EXEC sys.sp_MS_marksystemobject 'dbo.sp_test'