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