为什么sys.objects不能作为对象使用?SQL Server搜索对象的默认模式是什么?

时间:2010-12-08 12:06:06

标签: sql-server tsql database-design default database-schema

在阅读INFORMATION_SCHEMA vs sysobjects后,我想问一下这个问题:

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

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

然后,the answer by Barry

  

SQL Server查找中的对象   以下顺序:

     
      
  1. sys schema
  2.   
  3. 用户架构(这是   不同的存储过程 - 它会   查看stroed procs架构   而不是用户架构。
  4.   
  5. dbo schema
  6.   

在Shaun的评论中留下了悬而未决的问题:
没有“sys”,为什么sys.objects不可查询。 pefix(作为对象)?

SQL Server搜索的默认模式是什么,以什么顺序?

1 个答案:

答案 0 :(得分:1)

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

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

使用sysobjects的趣味和游戏:

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

(对于那些不想运行它的人 - 你仍然可以获得完整的sysobjects输出,而不是一个有一列的空表。)