Просмотр содержимого документа
«Табличные объекты в Microsoft SQL Server»
Табличные объекты в Microsoft SQL Server
Табличные переменные
Табличные переменные позволяют сохранить содержимое целой таблицы. Формальный синтаксис определения подобной переменной во многом похож на создание таблицы:
- DECLARE @табличная_переменная TABLE
- (столбец_1 тип_данных
- [атрибуты_столбца], столбец_2 тип_данных
- [атрибуты_столбца] ....)
- [ атрибуты_таблицы]
Например:
DECLARE @ABrends TABLE (ProductId INT, ProductName
NVARCHAR(20))
В данном случае переменная @ABrends будет
содержать два столбца.
В дальнейшем можно работать с этой переменной как с
обычной таблицей, то есть добавлять данные, изменять,
удалять и извлекать их.
Но такие переменные не полностью эквивалентны таблицам. Они живут в пределах одного пакета, после завершения работы которого они удаляются. То есть они носят временный характер, и физически их данные нигде не хранятся на жестком диске.
Временные и производные таблицы
Кроме табличных переменных можно определить временные таблицы. Такие таблицы могут быть полезны для хранения табличных данных внутри сложного комплексного скрипта.
Временные таблицы существуют на протяжении сессии базы данных. Если такая таблица создается в редакторе запросов в SQL Server Management Studio, то таблица будет существовать пока открыт редактор запросов. Таким образом, к временной таблице можно обращаться из разных скриптов внутри редактора запросов.
После создания все временные таблицы сохраняются в таблице tempdb , которая имеется по умолчанию в MS SQL Server.
Если необходимо удалить таблицу до завершения сессии базы данных, то для этой таблицы следует выполнить команду DROP TABLE .
Название временной таблицы начинается со знака решетки #.
Если используется один знак #, то создается локальная таблица, которая доступна в течение текущей сессии. Если используются два знака ##, то создается глобальная временная таблица. В отличие от локальной глобальная временная таблица доступна всем открытым сессиям базы данных.
Например, создадим локальную временную таблицу:
С этой таблицей можно работать как и с обычной таблицей - получать данные, добавлять, изменять и удалять их. Только после закрытия редактора запросов эта таблица перестанет существовать.
Подобные таблицы удобны для каких-то временных промежуточных данных.
Например, пусть есть три таблицы:
Выведем во временную таблицу промежуточные данные из таблицы Orders:
Здесь c начала извлекаются данные во временную таблицу #OrdersSummary. Причем так как данные в нее извлекаются с помощью выражения SELECT INTO, то предварительно таблицу не надо создавать. И эта таблица будет содержать id товара, общее количество проданного товара и на какую сумму был продан товар.
Затем эта таблица может использоваться в выражениях INNER JOIN.
Так же определяются глобальные временные таблицы. Их имя начинается с двух знаков ##:
Производные таблицы
Кроме временных таблиц MS SQL Server позволяет создавать производные таблицы, которые по производительности являются более эффективными, чем временные. Производная таблица задается с помощью ключевого слова WITH :
В отличие от временных таблиц производные хранятся в оперативной памяти и существуют только во время первого выполнения запроса, который представляет эту таблицу.