Skip to content

14. Обобщенные табличные выражения Transact SQL

Pandas edited this page Jan 7, 2018 · 1 revision

Обобщенные табличные выражения (ОТВ) можно представить себе как временные результирующие наборы, определенные в области выполнения единичных инструкций SELECT, INSERT, UPDATE, DELETE или CREATE VIEW. ОТВ, как и производные таблицы, не сохраняются в базе данных в виде объектов, время их жизни ограничено продолжительностью запроса. Но, в отличие от производных таблиц, ОТВ могут ссылаться сами на себя, а на них один и тот же запрос может ссылаться несколько раз.

В основном ОТВ предназначены для:

  • Создания рекурсивных запросов.
  • Замены представлений в тех случаях, когда нет необходимости сохранять в метаданных базы его определение.
  • Многократных ссылок на результирующую таблицу из одной и той же инструкции.

ОТВ могут быть определены в пользовательских подпрограммах (функциях, хранимых процедурах, триггерах, представлениях). Базовый синтаксиса ОТВ:

WITH имя_ОТВ [ ( список_имен_столбцов ) ]
AS
( определение_ОТВ )

Список имен столбцов необязателен только в том случае, если всем результирующим столбцам в определении запроса присвоены уникальные имена.

Структура рекурсивного ОТВ

Рекурсивное ОТВ должно содержать минимум один закрепленный элемент и один рекурсивный элемент. Следующий псевдокод отображает компоненты простого рекурсивного ОТВ, которое содержит один закрепленный элемент и один рекурсивный элемент.

WITH имя_ОТВ [(список_имен_столбцов )]
AS
(
-- Определение закрепленного элемента
UNION ALL
-- Определение рекурсивного элемента
)
-- Инструкция, использующая ОТВ
SELECT {*|список_имен_столбцов} FROM имя_ОТВ
Clone this wiki locally