Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо к:SQL Server
База данных Azure SQL
Управляемый экземпляр Azure SQL
Azure 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)