Как работают временные таблицы SQL Server

49
технологии 3.webp

Последнее обновление 12.03.2023 — Василий Иванов

Такие читатели, как вы, помогают поддерживать MUO. Когда вы совершаете покупку по ссылкам на нашем сайте, мы можем получать партнерскую комиссию. Читать далее.

Временные таблицы SQL Server временно хранят данные. Вы можете выполнять те же операции, такие как SELECT, INSERT, DELETE и UPDATE, с временной таблицей, как и с обычной таблицей SQL.

Временные таблицы находятся в базе данных tempdb и видны только во время соединения. Когда вы разрываете соединение, SQL Server удаляет временную таблицу. Вы также можете явно удалить его в любое время.

Типы временных таблиц SQL Server

Существует два типа временных таблиц SQL Server: локальные и глобальные.

Локальная временная таблица

Локальная временная таблица видна только тому соединению, которое ее создало. Когда это соединение завершается или пользователь отключается от экземпляра SQL Server, локальная временная таблица автоматически удаляется.

По теме:  DirectX 11 против DirectX 12: каковы различия и что следует использовать?

Чтобы создать локальную временную таблицу, используйте один символ решетки (#) в начале имени таблицы с оператором CREATE TABLE. Вот синтаксис.

 CREATE TABLE #TempTable (
   Column1 INT,
   Column2 VARCHAR(50)
);

Например, следующий код создает временную таблицу TempCustomer с именем и полем электронной почты.

 CREATE TABLE #TempCustomer (
   ID int NOT NULL PRIMARY KEY
   FullName VARCHAR(50),
   Email VARCHAR(50)
);

Глобальная временная таблица

Глобальная временная таблица — это временная таблица, видимая всем подключениям и пользователям. SQL Server удалит его, когда все соединения и пользователи, ссылающиеся на таблицу, будут разъединены.

Чтобы создать глобальную временную таблицу, добавьте к имени таблицы префикс двойного хеша (##) и используйте оператор CREATE TABLE.

 CREATE TABLE ##TempTable (
   Column1 INT,
   Column2 VARCHAR(50)
);

Следующий код создает глобальную временную таблицу с именем TempCustomer.

 CREATE TABLE ##TempCustomer (
   ID int NOT NULL PRIMARY KEY
   FullName VARCHAR(50),
   Email VARCHAR(50)
);

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

Как удалить временную таблицу

Экземпляр SQL Server автоматически удаляет временную таблицу, когда все пользователи, ссылающиеся на нее, отключились. Рекомендуется всегда явно удалять временные таблицы, чтобы освободить память tempdb.

Чтобы удалить временную таблицу, используйте оператор DROP TABLE IF EXISTS, за которым следует имя временной таблицы.

Вот как удалить таблицу #TempCustomer:

 DROP TABLE IF EXISTS #TempCustomer

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

 DROP TABLE IF EXISTS ##TempCustomer

Типичное использование временных таблиц SQL

Временные таблицы полезны, когда вам нужно хранить промежуточные результаты сложных запросов, которые необходимо обработать в дальнейшем. Например, при создании отчетов может потребоваться создание временных таблиц для хранения результатов запросов из нескольких баз данных. Затем вы можете создать окончательный отчет, выполнив запрос к временным таблицам.

Другой сценарий, в котором временные таблицы полезны, — это когда вам нужны результаты запроса из одной таблицы для выполнения другого запроса. Вы можете сохранить результаты во временной таблице, а затем ссылаться на них в своем новом запросе. По сути, вы используете временную таблицу в качестве рабочей или буферной таблицы для хранения данных, необходимых для выполнения конкретной задачи.

Использование временных таблиц в SQL Server

Вы можете использовать временные таблицы SQL Server для временного хранения и обработки данных. Существует два типа временных таблиц: локальные и глобальные. Локальная временная таблица видна для соединения, в котором она создана, а глобальная временная таблица видна для всех соединений.

Временные таблицы автоматически уничтожаются при отключении от экземпляра сервера. Однако, чтобы сохранить память, вы всегда должны удалять их после использования.