现在,SQL Server 早期版本中的许多系统表已作为 SQL Server 2005 中的一组视图实现。这些视图称为兼容性视图,专用于实现向后兼容。兼容性视图显示的元数据是 SQL Server 2000 中也有的元数据。但是,它们不显示与 SQL Server 2005 中引入的功能相关的任何元数据。因此,在使用 Service Broker 或分区等新功能时,需要切换为使用目录视图。
升级到目录视图的另一个原因是,存储用户 ID 和类型 ID 的兼容性视图列可能返回 NULL 或触发算术溢出。这是因为在 SQL Server 2005 中,可以创建 32,767 个以上的用户、组和角色以及 32,767 种以上的数据类型。例如,如果要创建 32,768 个用户,则可运行以下查询:
复制代码 | |
|---|---|
SELECT * FROM sys.sysusers | |
如果 ARITHABORT 设置为 ON,则查询会失败,并出现算术溢出错误。
如果 ARITHABORT 设置为 OFF,则 uid 列返回 NULL。
若要避免这些问题,建议使用新增的目录视图,该视图可以处理增加的用户 ID 和类型 ID 数量。
在 SQL Server 2005 中,可以创建 32,767 个以上的用户和数据类型。因此,兼容性视图中存储用户 ID 和类型 ID 的列可能返回 NULL 或触发算术溢出。下表列出了会出现此溢出的列。
| 列名 | 兼容性视图 | 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 |
|
| 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 | 没有此版本的信息。 |
| uid | sysprocesses | 没有此版本的信息。 |
请参阅
参考
目录视图 (Transact-SQL)将 SQL Server 2000 系统表映射到 SQL Server 2005 系统视图
本文介绍了SQLServer2005中的兼容性视图及其限制,特别是当用户ID和类型ID超过32,767时可能出现的问题。为了克服这些问题,文章推荐使用新的目录视图。
复制代码
38

被折叠的 条评论
为什么被折叠?



