
- •Семантическое моделирование данных: er-диаграммы
- •Реляционная модель данных: домены и отношения Общая характеристика реляционной модели данных
- •Типы данных – множество значений, множество операций
- •Простые типы данных
- •Структурированные типы данных
- •Ссылочные типы данных
- •Типы данных, используемые в реляционной модели
- •Отношения, атрибуты, кортежи отношения Определения и примеры
- •Свойства отношений
- •Первая нормальная форма
- •Реляционная модель данных: целостность
- •Целостность в реляционной модели данных
- •Реляционная модель данных: реляционная алгебра
- •Ограничения на операции
- •Соединение
- •Деление
- •Манипулирование реляционными данными
- •Реляционная модель данных: реляционное исчисление кортежей Реляционное исчисление
- •Исчисление кортежей
- •Реляционная алгебра и реляционное исчисление
- •Проектирование реляционных баз данных на основе принципов нормализации: функциональные зависимости
- •Проектирование реляционных баз данных на основе принципов нормализации: 1nf, 2nf, 3nf, bcnf Нормальная форма
- •Роль нормализации в проектировании реляционных баз данных
- •Нормальные формы
- •Первая нормальная форма (1nf)
- •Вторая нормальная форма (2nf)
- •Третья нормальная форма (3nf)
- •Нормальная форма Бойса — Кодда (bcnf)
- •Типы данных Transact-sql Типы данных (Transact-sql)
- •Типы данных
- •Преобразования типа Transact-sql Преобразование типов данных (компонент Database Engine)
- •Скалярные выражения Transact-sql
- •Логические выражения Transact-sql Логические операторы (Transact-sql)
- •Табличные выражения Transact-sql Табличные выражения
- •7.2.1. Предложение from
- •7.2.1.1. Соединённые таблицы
- •7.2.1.2. Псевдонимы таблиц и колонок
- •7.2.1.3. Подзапросы
- •7.2.1.4. Табличные функции
- •7.2.2. Предолжение where
- •7.2.3. Предложения group by и having
- •7.2.4. Обработка оконных функций
- •Обобщенные табличные выражения Transact-sql Применение обобщенных табличных выражений
- •With обобщенное_табличное_выражение (Transact-sql)
- •Рекомендации по созданию и использованию обобщенных табличных выражений
- •Рекомендации по созданию и использованию обобщенных табличных выражений
- •Рекомендации по созданию и использованию рекурсивных отв
- •Инструкции языка управления потоком Transact-sql Язык управления потоком (Transact-sql)
- •Сценарии и пакеты Transact-sql Сценарии языка Transact-sql
- •Инструкции языка описания данных Transact-sql Инструкции языка описания данных ddl (Transact-sql)
- •Инструкции alter (Transact-sql)
- •Инструкции create (Transact-sql)
- •Инструкции drop (Transact-sql)
- •Ограничения целостности Transact-sql
- •Инструкции языка обработки данных Transact-sql
- •Предложение for (Transact-sql)
- •Инструкции языка контроля доступа к данным Transact-sql
- •Хранимые процедуры Transact-sql Хранимые процедуры (компонент Database Engine)
- •Функции Transact-sql Основные сведения о пользовательских функциях
- •Триггеры Transact-sql Триггеры dml
- •Курсоры Transact-sql Курсоры
- •Использование простого курсора и синтаксиса
- •Индексы Transact-sql Индексы
- •Вторичный индекс path типа данных xml
- •Вторичный индекс value типа данных xml
- •Вторичный индекс property
- •Управление транзакциями в sql Server Инструкции транзакций (Transact-sql)
- •Журналирование в sql Server Журнал транзакций (sql Server)
- •Просмотр журнала ошибок sql Server
- •Управление безопасностью в sql Server
- •Массовый импорт и экспорт данных в sql Server Массовый импорт и экспорт данных (sql Server)
- •Методы массового импорта и экспорта данных
- •Файлы форматирования
- •Метаданные в sql Server Метаданные (службы Master Data Services)
- •Распределенные запросы и распределенные транзакции в sql Server Распределенные запросы
- •Распределенные транзакции Transact-sql
- •Распределенные запросы и распределенные транзакции
Рекомендации по созданию и использованию обобщенных табличных выражений
Определение ОТВ з
адается инструкциями SELECT, результирующий набор которых заполняет ОТВ. Инструкции SELECT для определения ОТВ должны удовлетворять таким же требованиям, что и при создании представления, за исключением того, что ОТВ не может определять другое ОТВ.Если в определении ОТВ задано несколько инструкций SELECT, то они должны быть соединены одним из следующих операторов работы с наборами: UNION ALL, UNION, EXCEPT или INTERSECT.
За ОТВ должна следовать одиночная инструкция SELECT, INSERT, UPDATE, MERGE или DELETE, ссылающаяся на некоторые или на все столбцы ОТВ. ОТВ может задаваться также в инструкции CREATE VIEW как часть определяющей инструкции SELECT представления.
ОТВ могут иметь ссылки сами на себя, а также на ОТВ, определенные до этого в том же предложении WITH. Ссылки на определяемые далее ОТВ недопустимы.
Задание в одном ОТВ нескольких предложений WITH недопустимо. Например, если определение ОТВ содержит вложенный запрос, этот вложенный запрос не может содержать вложенное предложение WITH, определяющее другое ОТВ.
Следующие предложения не могут использоваться в определении ОТВ:
COMPUTE или COMPUTE BY
ORDER BY (за исключением случаев задания предложения TOP)
INTO
Предложение OPTION с подсказками в запросе
FOR XML
FOR BROWSE
Если ОТВ используется в инструкции, являющейся частью пакета, за инструкцией, стоящей перед ней, должен следовать символ точки с запятой.
Запрос, ссылающийся на ОТВ, может использоваться для определения курсора.
В ОТВ могут быть ссылки на таблицы, находящиеся на удаленных серверах.
Рекурсивные запросы, использующие ОТВ
В ранних версиях SQL Server рекурсивный запрос моделировался с использованием временных таблиц и курсоров. Начиная с версии SQL Server 2005 рекурсивный запрос реализуется с помощью ОТВ, которое ссылается само на себя, создавая рекурсивное ОТВ. Таким образом, запрос именуется рекурсивным, если он ссылается на рекурсивное ОТВ.
Обычно рекурсивные запросы используются для возвращения иерархических данных, например, отображения сотрудников в структуре организации или данных в сценарии ведомости материалов, в котором родительский продукт состоит из одного или более компонентов, и эти компоненты могут, в свою очередь, состоять из вспомогательных компонентов или являться компонентами других родителей.
Структура рекурсивного ОТВ
Рекурсивное ОТВ должно содержать минимум один закрепленный элемент и один рекурсивный элемент. Следующий псевдокод отображает компоненты простого рекурсивного ОТВ, которое содержит один закрепленный элемент и один рекурсивный элемент.
WITH имя_ОТВ [(список_имен_столбцов )]
AS
(
-- Определение закрепленного элемента
UNION ALL
-- Определение рекурсивного элемента
)
-- Инструкция, использующая ОТВ
SELECT {*|список_имен_столбцов} FROM имя_ОТВ
Рекурсивное выполнение имеет следующую семантику:
разбиение ОТВ на закрепленный и рекурсивный элементы;
запуск закрепленного элемента с созданием первого вызова или базового результирующего набора (T0);
запуск рекурсивного элемента, где Ti — это вход, а Ti+1 — это выход;
повторение шага 3 до тех пор, пока не вернется пустой набор;
возвращение результирующего набора. Результирующий набор получается с помощью инструкции UNION ALL от T0 до Tn.