Время прочтения: 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.

Такие простые и банальные на первый взгляд приемы помогут сэкономить время на поиски нужной информации и избежать ошибок.