sql-server - 为什么MSSQL中的某些存储过程必须在前面加上 `master..`来调用,而其他存储过程则可以不加前缀来调用?

标签 sql-server stored-procedures

相关的 MS SQL Server 版本是 8。

在除 master 之外的数据库上下文中,如果我从 master 数据库调用存储过程,对于其中一些存储过程,我必须附加 master.. 前缀(否则我会得到 Could not find Stored procedure 'procname' 错误),对于其中一些我不知道。 例如,我可以调用 --

EXEC sp_addlogin 'user' 'pass';

-- 它可以工作,但是--

EXEC xp_cmdshell 'command'; 

-- 没有。我必须在前面添加 master.. 才能使其正常工作 -

EXEC master..xp_cmdshell 'command';

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

为什么我必须在前面加上 master.. 来调用其中一些,而有些则可以不带 master.. 来调用?

最佳答案

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

See this link for more information.

关于sql-server - 为什么MSSQL中的某些存储过程必须在前面加上 `master..`来调用,而其他存储过程则可以不加前缀来调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30386460/

相关文章:

sql - 如何从具有多个 SET 依赖项的 MSSQL 表中选择记录?

sql-server - ENCRYPTBYPASSPHRASE 和 DECRYPTBYPASSPHRASE 未返回正确的值

sql - 使用 bacpac 导入数据层应用程序

SQL 除以零错误

python - Django 多结果集

mysql - 在 Rails 中使用存储过程

sql-server - SQL Server 对某些 unicode 字符返回问号

php - 命令不同步;在 Mysql 中调用存储过程时,您现在无法运行此命令

oracle - 我的程序中不断出现错误,这些错误有助于添加新类(class),并在说明中提出了要求

mysql - 存储过程返回 `ASCII\0` 错误但无法找到所指的内容