为什么MSSQL中的某些存储过程必须先调用`master..`,而其他存储过程可以不调用?

时间:2015-05-22 00:16:33

标签: sql-server stored-procedures

有问题的MS SQL Server版本是8。

在master之外的数据库的上下文中,如果我从master数据库调用存储过程,对于其中一些我必须附加master..前缀(否则我得无法找到存储过程' procname& #39; 错误),对于他们中的一些我不知道。 例如,我可以调用 -

EXEC sp_addlogin 'user' 'pass';

- 它有效,但是 -

EXEC xp_cmdshell 'command'; 

- 没有。我必须预先master..才能使其发挥作用 -

EXEC master..xp_cmdshell 'command';

我可能在这里错了,但我发现必须将master..仅添加到以xp_开头的存储过程(而不是sp_)。

为什么我必须先调用其中一些master..,而其中一些可以不调用?

2 个答案:

答案 0 :(得分:5)

名称以sp_开头的master数据库中的过程可以在任何其他用户数据库中调用,而无需添加master..前缀。由于以xp_开头的程序不遵循该规则,因此在调用它们时仍需要添加master..前缀。

See this link for more information.

答案 1 :(得分:0)

xp_代表扩展存储过程。它们存储在master数据库中。

sp_代表“特殊”。它们是Microsoft提供的过程,存在于每个数据库中。您可以通过转到(数据库名称)>在对象资源管理器中看到它们。可编程性>存储过程>系统存储过程。因为它们与您的查询位于同一个数据库中,所以您无需添加master..

作为旁注,明智的做法是不使用sp_...命名您自己的存储过程。请参阅解释here