为什么我们不能访问在主数据库中创建的表,该数据库的名称不以用户数据库中的“sp_”开头?

时间:2011-12-29 07:52:59

标签: sql-server sql-server-2005

我在某处读到如果我们使用sp_sometablename在主数据库中创建表,则可以从任何其他用户数据库访问它。

e.g。

use master
create table sp_TestTbl(Id int identity, Name varchar(20))
//Table created

现在,如果我执行以下

use test
select * from sp_TestTbl

它有效。

然而,如果我没有为sp_添加表名前缀,尽管该表将在主数据库中创建,但我们无法从任何用户数据库访问它

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

use test
select * from abc_TestTbl

错误:

  

消息208,级别16,状态1,行6无效的对象名称   'abc_TestTbl'。

原因是什么?

由于

1 个答案:

答案 0 :(得分:1)

试试这个:

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

use test
select * from master.dbo.abc_TestTbl

从其他数据库使用时,您需要完全限定表名

<强> BUT

这是一个 完全不好的主意 - 在master数据库中创建用户对象。

sp _ 前缀由Sql Server以不同方式处理 - 它首先在主数据库中查找此前缀的对象