Поделиться через


Представления совместимости системы (Transact-SQL)

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure конечной точке аналитики платформы Аналитики Azure Synapse Analytics (PDW) в Microsoft Fabric Хранилище в Microsoft Fabric

Многие системные таблицы из предыдущих выпусков SQL Server теперь реализованы как набор представлений. Эти представления известны как представления совместимости, и они предназначены только для обратной совместимости. Представления совместимости предоставляют те же метаданные, которые были доступны в SQL Server 2000 (8.x). Однако представления совместимости не предоставляют никаких метаданных, связанных с функциями, представленными в SQL Server 2005 (9.x) и более поздних версиях. Поэтому при использовании новых функций, таких как Service Broker или секционирование, необходимо переключиться на использование представлений каталога.

Еще одной причиной добавления обновлений в представления каталога является тот факт, что столбцы представлений совместимости, хранящие идентификаторы пользователей и типов, могут возвращать значение NULL или арифметические переполнения триггера. Это происходит потому, что можно создавать более 32 767 пользователей, групп и ролей, а также 32 767 типов данных. Например, если вы создали 32 768 пользователей, а затем выполните следующий запрос: SELECT * FROM sys.sysusers При значении ARITHABORT, равном ON, запрос завершается ошибкой арифметического переполнения. Если ARITHABORT имеет значение OFF, то столбец пользовательского интерфейса возвращает ЗНАЧЕНИЕ 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 sys.database_permissions

sys.server_permissions
даритель 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

При указании в пользовательской базе данных системные таблицы, объявленные как устаревшие в SQL Server 2000 (например, syslanguages или syscacheobjects), теперь привязаны к представлению совместимости с обратной совместимостью в схеме sys. С тех пор как системные таблицы SQL Server 2000 устарели для многих версий, данное изменение не считается критическим изменением.

Пример. Если пользователь создает таблицу с именем syslanguages в пользовательской базе данных, в SQL Server 2008 инструкция SELECT * from dbo.syslanguages; в этой базе данных вернет значения из таблицы пользователя. Начиная с SQL Server 2012, эта практика вернет данные из системного представления sys.syslanguages.

См. также

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