SQL Server 早期版本中的许多系统表现在都作为一组视图实现。这些视图称为兼容性视图,仅用于向后兼容。兼容性视图公开的元数据在 SQL Server 2000 中也提供。但是,兼容性视图不公开与在 SQL Server 2005 及更高版本中引入的功能有关的任何元数据。因此,当您使用新功能(例如 Service Broker 或分区)时,必须切换到使用目录视图。 升级到目录视图的另一个原因是,存储用户 ID 和类型 ID 的兼容性视图列可能返回 NULL 或触发算术溢出。这是因为您可以创建超过 32,767 个用户、组和角色,以及超过 32,767 种数据类型。例如,如果要创建 32,768 个用户,则可运行以下查询:SELECT * FROM sys.sysusers。如果 ARITHABORT 设置为 ON,则查询会失败,并出现算术溢出错误。如果 ARITHABORT 设置为 OFF,则 uid 列返回 NULL。若要避免这些问题,建议您使用新增的目录视图,这些视图可以处理增加的用户 ID 和类型 ID 数目。下表列出了会出现此溢出的列。
这些视图包含 Microsoft SQL Server 中由复制使用的信息。 使用这些视图可以更轻松地访问复制系统表中的数据。将某个用户数据库启用为发布数据库或订阅数据库时,便会在该数据库中创建视图。 从复制拓扑中删除用户数据库时,便会删除该数据库中的所有复制对象。 访问复制元数据的首选方法是使用复制存储过程。
任何用户都不应直接更改系统视图。
动态管理视图和函数
动态管理视图和函数返回可用于监视服务器实例的运行状况、诊断故障以及优化性能的服务器状态信息。
动态管理视图和函数返回特定于实现的内部状态数据。在未来的 SQL Server 版本中,它们的架构和返回的数据可能会发生更改。因此,未来版本中的动态管理视图和函数可能与 SQL Server 2008 中的动态管理视图和函数不兼容
动态管理视图和函数分为两种类型:
服务器范围内的动态管理视图和函数。此类型需要具有该服务器的 VIEW SERVER STATE 权限。
数据库范围内的动态管理视图和函数。此类型需要具有该数据库的 VIEW DATABASE STATE 权限。
查询动态管理视图或函数需要对于对象具有 SELECT 权限以及 VIEW SERVER STATE 或 VIEW DATABASE STATE 权限。这样您可以有选择地限制用户或登录名对动态管理视图和函数的访问。为此,首先在 master 中创建用户,然后拒绝该用户对不希望被访问的动态管理视图或函数的 SELECT 权限。此后,无论该用户的数据库上下文如何,用户都将无法选择这些动态管理视图或函数。
注意:由于 DENY 的优先级高,所以如果用户被授予 VIEW SERVER STATE 权限但被拒绝 VIEW