2010-12-08 40 views
0

在阅读INFORMATION_SCHEMA vs sysobjects,我想问的问题是:为什么sys.objects不能作为对象使用,以及SQL Server搜索对象的默认模式是什么?

SQL Server 2005/2008 - Why is the sys.sysobjects view available to users without the schema name?
这似乎已经问过,但我没有找到答案回答了这个问题(问)。

为什么如果sys架构在早期版本的SQL Server中不存在,为什么sysbjects可用作sys.sysobjects?
(的解释是,这是为了向后兼容早期版本的SQL Server)

然后,the answer by Barry

SQL Server查找在 对象依次为:

  1. SYS架构
  2. 用户架构(这是 不同的存储过程 - 它会 看起来在stroed特技模式 而不是用户模式。
  3. dbo架构

已经离开肖恩在评论的问题悬而未决:
为什么sys.objects中也不是没有可查询的 “SYS”。 pefix(作为对象)?

什么是由SQL Server搜索的默认模式和顺序?

回答

1

搜索用户的默认模式,然后搜索dbo模式。除非明确指定(例如,sys.objects),否则sys架构不会被搜索。

但是,对于向后兼容的视图(例如sysobjects),有一些特殊的逻辑 - 即使指定了模式,模式也会被忽略,并使用来自sys模式的视图。由于旧代码永远不会创建名为“dbo.sysobjects”的表,因此这些视图用于向后兼容,因此不应该用于未来的任何开发。

娱乐和游戏与系统对象:

create table dbo.sysobjects (
    ID int not null 
) 
go 
select * from dbo.sysobjects 
go 

(对于那些不想谁运行它 - 你仍然得到完整的系统对象的输出,而不是一个空表有一列)。

+0

+1你有更多的乐趣和游戏吗? – 2010-12-08 18:41:19

相关问题