Системные представления совместимости (Transact-SQL)System Compatibility Views (Transact-SQL)

ОБЛАСТЬ ПРИМЕНЕНИЯ: даSQL Server нетБаза данных SQL AzureнетХранилище данных SQL AzureнетParallel Data WarehouseAPPLIES TO: yesSQL Server noAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Многие системные таблицы из предыдущих версий SQL ServerSQL Server в настоящее время реализованы в виде набора представлений.Many of the system tables from earlier releases of SQL ServerSQL Server are now implemented as a set of views. Эти представления известны как представления совместимости, и они предназначены только для обратной совместимости.These views are known as compatibility views, and they are meant for backward compatibility only. Представления совместимости содержат метаданные, которые были доступны в SQL Server 2000 (8.x)SQL Server 2000 (8.x).The compatibility views expose the same metadata that was available in SQL Server 2000 (8.x)SQL Server 2000 (8.x). Однако представления совместимости не содержат метаданных, связанных с функциями, появившимися в SQL Server 2005 (9.x)SQL Server 2005 (9.x) и более поздних версиях.However, the compatibility views do not expose any of the metadata related to features that are introduced in SQL Server 2005 (9.x)SQL Server 2005 (9.x) and later. Поэтому при использовании этих возможностей, таких как компонент Компонент Service BrokerService Broker или секционирование, следует применять представления каталогов.Therefore, when you use new features, such as Компонент Service BrokerService Broker or partitioning, you must switch to using the catalog views.

Еще одной причиной добавления обновлений в представления каталога является тот факт, что столбцы представлений совместимости, хранящие идентификаторы пользователей и типов, могут возвращать значение NULL или арифметические переполнения триггера.Another reason for upgrading to the catalog views is that compatibility view columns that store user IDs and type IDs may return NULL or trigger arithmetic overflows. Это происходит потому, что можно создавать более 32 767 пользователей, групп и ролей, а также 32 767 типов данных.This is because you can create more than 32,767 users, groups, and roles, and 32,767 data types. Например, если нужно создать 32 768 пользователей, а затем запустите следующий запрос: SELECT * FROM sys.sysusers.For example, if you were to create 32,768 users, and then run the following query: SELECT * FROM sys.sysusers. При значении ARITHABORT, равном ON, запрос завершается ошибкой арифметического переполнения.If ARITHABORT is set to ON, the query fails with an arithmetic overflow error. Если значение параметра ARITHABORT равно OFF, uid столбец возвращает значение NULL.If ARITHABORT is set to OFF, the uid column returns NULL.

Чтобы избежать таких проблем, рекомендуется использовать новые представления каталогов, которые могут содержать увеличившееся число идентификаторов пользователей и типов.To avoid these problems, we recommend that you use the new catalog views that can handle the increased number of user IDs and type IDs. В следующей таблице перечислены столбцы, которые могут подвергнуться переполнению.The following table lists the columns that are subject to this overflow.

Имя столбцаColumn name Представление совместимостиCompatibility view Представление SQL Server 2005SQL Server 2005 view
xusertypexusertype syscolumnssyscolumns sys.columnssys.columns
usertypeusertype syscolumnssyscolumns sys.columnssys.columns
memberuidmemberuid sysmemberssysmembers sys.database_role_memberssys.database_role_members
groupuidgroupuid sysmemberssysmembers sys.database_role_memberssys.database_role_members
UIDuid sysobjectssysobjects sys.objectssys.objects
UIDuid sysprotectssysprotects sys.database_permissionssys.database_permissions

sys.server_permissionssys.server_permissions
Объект, предоставляющий разрешениеgrantor sysprotectssysprotects sys.database_permissionssys.database_permissions

sys.server_permissionssys.server_permissions
xusertypexusertype systypessystypes sys.typessys.types
UIDuid systypessystypes sys.typessys.types
UIDuid sysuserssysusers sys.database_principalssys.database_principals
altuidaltuid sysuserssysusers sys.database_principalssys.database_principals
gidgid sysuserssysusers sys.database_principalssys.database_principals
UIDuid syscacheobjectssyscacheobjects sys.dm_exec_plan_attributessys.dm_exec_plan_attributes
UIDuid sysprocessessysprocesses sys.dm_exec_requestssys.dm_exec_requests

При обращении к базе данных пользователя, системные таблицы, которые были объявлены как устаревшие в SQL Server 2000 (такие как syslanguages или syscacheobjects), теперь привязан к представлению обратной совместимости в sys схемы.When referenced in a user database, system tables which were announced as deprecated in SQL Server 2000 (such as syslanguages or syscacheobjects), are now bound to the back-compatibility view in the sys schema. С тех пор как системные таблицы SQL Server 2000 устарели для многих версий, данное изменение не считается критическим изменением.Since the SQL Server 2000 system tables have been deprecated for multiple versions, this change is not considered a breaking change.

Пример Если пользователь создает таблицу пользователя с именем syslanguages пользователя-базы данных в SQL Server 2008, инструкция SELECT * from dbo.syslanguages; в этой базе данных вернет значения из пользовательской таблицы.Example: If a user creates a user-table called syslanguages in a user-database, in SQL Server 2008, the statement SELECT * from dbo.syslanguages; in that database would return the values from the user table. Начиная с SQL Server 2012, этот метод будет возвращать данные из системного представления sys.syslanguages.Beginning in SQL Server 2012, this practice will return data from the system view sys.syslanguages.

См. такжеSee Also

Представления каталога (Transact-SQL) Catalog Views (Transact-SQL)
Сопоставление системных таблиц с системными представлениями (Transact-SQL)Mapping System Tables to System Views (Transact-SQL)