在阅读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)
SQL Server查找中的对象 以下顺序:
- sys schema
- 用户架构(这是 不同的存储过程 - 它会 查看stroed procs架构 而不是用户架构。
- dbo schema
醇>
在Shaun的评论中留下了悬而未决的问题:
没有“sys”,为什么sys.objects不可查询。 pefix(作为对象)?
SQL Server搜索的默认模式是什么,以什么顺序?
答案 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输出,而不是一个有一列的空表。)