我在某处读到如果我们使用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'。
原因是什么?
由于
答案 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以不同方式处理 - 它首先在主数据库中查找此前缀的对象