Представления совместимости (Transact-SQL)
Многие системные таблицы из предыдущих версий SQL Server в настоящее время реализованы в виде набора представлений. Эти представления известны как представления совместимости, и они предназначены только для обратной совместимости. Представления совместимости содержат метаданные, которые были доступны в SQL Server 2000. Однако представления совместимости не содержат метаданных, связанных с функциями, появившимися в SQL Server 2005 и более поздних версиях. Поэтому при использовании этих возможностей, таких как компонент Компонент Service Broker или секционирование, следует применять представления каталогов.
Еще одной причиной добавления обновлений в представления каталога является тот факт, что столбцы представлений совместимости, хранящие идентификаторы пользователей и типов, могут возвращать значение NULL или арифметические переполнения триггера. Это происходит потому, что можно создавать более 32 767 пользователей, групп и ролей, а также 32 767 типов данных. Например, если создать 32 768 пользователей, после чего выполнить следующий запрос: SELECT * FROM sys.sysusers. При значении ARITHABORT, равном ON, запрос завершается ошибкой арифметического переполнения. Если значение параметра 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 |
|
grantor |
sysprotects |
|
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)