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

Применимо к: даSQL Server (все поддерживаемые версии)

Многие системные таблицы из предыдущих версий 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, столбец 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
такой sysobjects sys.objects
такой sysprotects sys.database_permissions

sys.server_permissions
GRANTOR sysprotects sys.database_permissions

sys.server_permissions
xusertype systypes sys.types
такой systypes sys.types
такой sysusers sys.database_principals
altuid sysusers sys.database_principals
gid sysusers sys.database_principals
такой syscacheobjects sys.dm_exec_plan_attributes
такой 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)