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

Применимо к:SQL ServerБаза данных Azure SQLУправляемый экземпляр Azure SQLAzure Synapse AnalyticsСистема платформы аналитики (PDW)Конечная точка SQL аналитики в Microsoft FabricХранилище в Microsoft FabricБаза данных SQL в 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 установлено в ВКЛЮЧЕНО, запрос проваливается из-за ошибки арифметического переполнения. Если ARITHABORT установлено в OFF, столбец uid возвращает 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)