Представления совместимости системы (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)