Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 为什么我们不能访问在master db中创建的名称不以“开始”开头的表;sp“uquot;来自用户数据库?_Sql Server_Sql Server 2005 - Fatal编程技术网

Sql server 为什么我们不能访问在master db中创建的名称不以“开始”开头的表;sp“uquot;来自用户数据库?

Sql server 为什么我们不能访问在master db中创建的名称不以“开始”开头的表;sp“uquot;来自用户数据库?,sql-server,sql-server-2005,Sql Server,Sql Server 2005,我在某个地方读到,如果我们使用sp_sometablename在masterdb中创建一个表,它将可以从任何其他用户数据库访问 e、 g 现在如果我执行下面的命令 use test select * from sp_TestTbl 成功了 然而,如果我没有在表名前面加上sp_uu,尽管该表将在master db中创建,但我们无法从任何用户数据库访问它 use master create table abc_TestTbl(Id int identity, Name varchar(20))

我在某个地方读到,如果我们使用
sp_sometablename
在masterdb中创建一个表,它将可以从任何其他用户数据库访问

e、 g

现在如果我执行下面的命令

use test
select * from sp_TestTbl
成功了

然而,如果我没有在表名前面加上
sp_uu
,尽管该表将在master db中创建,但我们无法从任何用户数据库访问它

use master
create table abc_TestTbl(Id int identity, Name varchar(20))

use test
select * from abc_TestTbl
错误:

Msg 208,16级,状态1,第6行无效对象名称 “abc_TestTbl”

原因是什么

谢谢

试试这个:

use master
create table abc_TestTbl(Id int identity, Name varchar(20))

use test
select * from master.dbo.abc_TestTbl
从另一个数据库使用时,需要完全限定表名

但是

在主数据库中创建用户对象是一个非常糟糕的想法


Sql Server对sp_前缀的处理方式有所不同-它首先在master DB中查找对象以查找此前缀

我永远不会在表上使用
sp_
前缀-它通常用于存储过程,但它是Microsoft为其保留的前缀-不要使用它!如果您在
master
中有一个表
abc\u TestTbl
(另外:无论如何,您都不应该在
master
中创建内容!),那么您可以使用
select*from master.dbo.abc\u TestTbl
从中进行选择-无论它有什么前缀…正确。。我从来没有这样做,但出于实验的考虑,我问过。但是为什么对于sp_uu情况,我们不需要给出一个完全限定的名称,但是对于另一种情况,我们必须给出一个完全限定的名称?为sp_u前缀添加了答案
use master
create table abc_TestTbl(Id int identity, Name varchar(20))

use test
select * from master.dbo.abc_TestTbl