兼容性视图 (Transact-SQL)

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 数目。下表列出了会出现此溢出的列。

列名

兼容性视图

SQL Server 2005 视图

xusertype

syscolumns

sys.columns

usertype

syscolumns

sys.columns

memberuid

sysmembers

sys.database_role_members

groupuid

sysmembers

sys.database_role_members

uid

sysobjects

sys.objects

uid

sysprotects

  • sys.database_permissions

  • sys.server_permissions

grantor

sysprotects

  • sys.database_permissions

  • sys.server_permissions

xusertype

systypes

sys.types

uid

systypes

sys.types

uid

sysusers

sys.database_principals

altuid

sysusers

sys.database_principals

gid

sysusers

sys.database_principals

uid

syscacheobjects

sys.dm_exec_plan_attributes

uid

sysprocesses

sys.dm_exec_requests