我注意到 SQL Server Express 2008 中有一些奇怪的行为,并且我一直在尝试找出原因。创建新数据库时,无需指定架构标识符即可访问 sys.sysobjects 视图,如下所示:
SELECT * FROM [sysobjects]
即使您的默认架构不是“sys”,您也可以执行此操作。我对schema的理解是,数据库引擎会首先在用户的默认schema中搜索某个对象,如果用户有权限的话再搜索dbo schema,然后停止查找。另外,我知道可以访问 sys.sysobjects 视图,因为默认情况下授予公共角色选择权限。我只是不知道为什么可以在没有模式名称的情况下访问它。
在检查“dbo”模式后,引擎是否继续寻找对象,sysobjects 视图是特殊情况,还是完全是其他东西?
这是一个特殊情况。这些是向后兼容性视图。
在 SQL 2000 中,没有必要使用sys
架构,以便他们能够使现有代码仍然适用于这些对象。
这些都已被新的系统视图和功能所取代,并计划即将被删除在 SQL Server 的未来版本中,因此应尽可能避免(请参阅主题“将系统表映射到系统视图” 在 BOL 中了解详细信息)。虽然有某些情况其中仍然需要它们。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)