Время прочтения: 2 мин.
Сами по себе представления можно считать виртуальными таблицами. Они, представляя из себя ряд столбцов и строк данных, выполняют функцию фильтра таблиц, на которые представление ссылается. Ссылаться они могут как на одну, так и несколько таблиц и представлений независимо от того, текущая это база данных или нет. В чем состоит преимущество представлений? Они возвращают запрашиваемые данные в более удобной форме, упрощая тем самым комплексные запросы. Отличие их от таблиц заключается в том, что представления динамически извлекают необходимые пользователю данные.
Поговорим мы конкретно про системные представления, предоставляющие доступ к метаданным. С помощью них мы можем получить информацию об экземпляре SQL Server и всех объектах, которые в нем определены. Так представление sys.types позволяет получить сведения о всех системных и определенных пользователем типах данных.
select
name
,system_type_id
,user_type_id
,schema_id
,principal_id
,max_length
,precision image
from sys.types
Следующие системные представления могут быть наиболее полезными:
- servers
- databases
- tables
- views
- objects
- columns
- sysusers
- types
Некоторые представления являются производными от других. Так, к примеру, представление tables наследуется из представления objects, но возвращают разные уровни информации о необходимой таблице.
Если вы используете большое количество разобщенных таблиц или имеете дело с данными, составляющими сложную структуру, то использование системных представлений может облегчить и сделать более удобной работу с ними. Поиск необходимых данных в разобщенной системе станет проще. Являясь одним из способов получения метаданных, системные представления полезны для анализа системы и выявления ошибок на высоких уровнях.
К примеру, вы работаете с базой данных Интернет-магазина, состоящей из нескольких десятков связных таблиц. Вас интересует только цена товара (Price), независимо от других данных. Поиск в обозревателе объектов может затянуться, если вы не помните все столбцы каждой таблицы. Но использование системных представлений упростит этот процесс.
select col.[name]
,t.[name]
from sys.columns col
join sys.tables t
on col.object_id = t.object_id
where col.[name] = 'Price'
Как раз пригодились знания, что представления таблиц (sys.tables) наследованы напрямую от представлений объектов (sys.objects). Джойним их по общему полю object_id.
Необходимое нам поле находится в таблице Product.
Такие простые и банальные на первый взгляд приемы помогут сэкономить время на поиски нужной информации и избежать ошибок.