【问题标题】:Why isn't sys.objects available as objects and what are default schemas being searched for objects by SQL Server?为什么 sys.objects 不能作为对象使用,SQL Server 搜索对象的默认架构是什么?
【发布时间】:2011-05-22 04:39:13
【问题描述】:

看了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. 系统架构
  2. 用户架构(这是 存储过程不同 - 它会 查看 stroed procs 架构 而不是用户模式。
  3. dbo 架构

已在 cmets 中等待 Shaun 提出的问题:
为什么没有“sys”就无法查询 sys.objects。 pefix(作为对象)?

SQL Server 搜索的默认架构是什么?按什么顺序搜索?

【问题讨论】:

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


    【解决方案1】:

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

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

    使用 sysobjects 的乐趣和游戏:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-17
      • 2017-09-15
      • 2011-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多