Ответ
Временная таблица — это таблица, которая существует только в течение определенного времени (сеанса соединения или транзакции) и автоматически удаляется. Она предназначена для временного хранения промежуточных результатов сложных запросов, данных для обработки в пакетах или изоляции сеансов.
Ключевые особенности:
- Время жизни: Удаляется автоматически при закрытии соединения с БД (сеанса) или, в некоторых СУБД, в конце транзакции.
- Область видимости: Может быть локальной (видна только в текущем соединении) или глобальной (видна всем соединениям).
- Производительность: Как правило, операции с временными таблицами логируются минимально или не логируются вообще, что делает их быстрее обычных таблиц для промежуточных вычислений.
- Изоляция: Данные в локальной временной таблице изолированы для каждого пользовательского сеанса, даже если таблицы имеют одинаковые имена.
Синтаксис и примеры (на основе SQL Server / T-SQL):
-
Локальная временная таблица: Начинается с одного символа
#. Видна только в рамках текущего соединения.-- Создание локальной временной таблицы CREATE TABLE #TempSales ( ProductID INT, TotalAmount DECIMAL(10,2) ); -- Вставка промежуточных данных агрегации INSERT INTO #TempSales SELECT ProductID, SUM(Amount) FROM Sales GROUP BY ProductID; -- Использование в последующих запросах этого же соединения SELECT p.Name, ts.TotalAmount FROM Products p JOIN #TempSales ts ON p.ID = ts.ProductID WHERE ts.TotalAmount > 1000; -- При закрытии соединения таблица #TempSales автоматически удалится -
Глобальная временная таблица: Начинается с двух символов
##. Видна всем соединениям с сервером. Удаляется, когда все соединения, ссылающиеся на нее, закроются.CREATE TABLE ##GlobalConfig ( SettingKey VARCHAR(50), SettingValue VARCHAR(100) );
Типичные сценарии использования:
- Разбиение сложного многошагового запроса на простые этапы.
- Хранение результатов вызова хранимой процедуры для дальнейшей обработки.
- Замена курсоров в циклической обработке строк.
- Тестирование и отладка запросов без создания постоянных объектов в БД.