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

gol*_*lem 4 sql-server stored-procedures

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

在master之外的数据库的上下文中如果我从master数据库调用存储过程,对于其中一些我必须附加master..前缀(否则我得到找不到存储过程'procname'错误),对于其中一些我不这样做.例如,我可以打电话 -

EXEC sp_addlogin 'user' 'pass';
Run Code Online (Sandbox Code Playgroud)

- 它有效,但是 -

EXEC xp_cmdshell 'command'; 
Run Code Online (Sandbox Code Playgroud)

- 没有.我必须在master..它前面工作 -

EXEC master..xp_cmdshell 'command';
Run Code Online (Sandbox Code Playgroud)

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

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

Joh*_*dge 5

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

有关更多信息,请参阅此链接.