有问题的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..
,而其中一些可以不调用?
答案 0 :(得分:5)
名称以sp_
开头的master数据库中的过程可以在任何其他用户数据库中调用,而无需添加master..
前缀。由于以xp_
开头的程序不遵循该规则,因此在调用它们时仍需要添加master..
前缀。
答案 1 :(得分:0)
xp_
代表扩展存储过程。它们存储在master
数据库中。
sp_
代表“特殊”。它们是Microsoft提供的过程,存在于每个数据库中。您可以通过转到(数据库名称)>在对象资源管理器中看到它们。可编程性>存储过程>系统存储过程。因为它们与您的查询位于同一个数据库中,所以您无需添加master..
作为旁注,明智的做法是不使用sp_...
命名您自己的存储过程。请参阅解释here。