В этом руководстве вы узнаете, как создавать временные таблицы SQL Server и эффективно ими управлять.
Временные таблицы — это таблицы, которые временно существуют на SQL Server.
Временные таблицы полезны для хранения немедленных наборов результатов, к которым осуществляется многократный доступ.
Создание временных таблиц
SQL Server предоставляет два способа создания временных таблиц с помощью операторов SELECT INTO и CREATE TABLE.
Создание временных таблиц с помощью оператора SELECT INTO
Первый способ создания временной таблицы — использование оператора SELECT INTO, как показано ниже:
SELECT select_list INTO temporary_table FROM table_name ....
Имя временной таблицы начинается с символа решетки(#). Например, следующий оператор создает временную таблицу с помощью оператора SELECT INTO:
SELECT product_name, list_price INTO #trek_products --- temporary table FROM production.products WHERE brand_id = 9;
В этом примере мы создали временную таблицу с именем #trek_products с двумя столбцами, полученными из списка выбора оператора SELECT. Оператор создал временную таблицу и заполнил ее данными из таблицы production.products.
После выполнения оператора вы сможете найти имя временной таблицы, созданной в системной базе данных с именем tempdb, доступ к которой можно получить через SQL Server Management Studio, используя следующий путь Системные базы данных > tempdb > Временные таблицы, как показано на следующем рисунке:
Как вы можете ясно видеть на рисунке, временная таблица также состоит из последовательности цифр в качестве постфикса. Это уникальный идентификатор временной таблицы. Поскольку несколько подключений к базе данных могут создавать временные таблицы с одинаковым именем, SQL Server автоматически добавляет этот уникальный номер в конец имени временной таблицы, чтобы различать временные таблицы.
Создайте временные таблицы с помощью оператора CREATE TABLE
Второй способ создания временной таблицы — использование оператора CREATE TABLE:
CREATE TABLE #haro_products( product_name VARCHAR(MAX), list_price DEC(10,2) );
Этот оператор имеет тот же синтаксис, что и создание обычной таблицы. Однако имя временной таблицы начинается с символа решетки(#)
После создания временной таблицы вы можете вставлять данные в эту таблицу как в обычную таблицу:
INSERT INTO #haro_products SELECT product_name, list_price FROM production.products WHERE brand_id = 2;
Конечно, вы можете запросить данные по нему в рамках текущего сеанса:
SELECT * FROM #haro_products;
Однако если вы откроете другое соединение и попробуете выполнить запрос, указанный выше, вы получите следующую ошибку:
Invalid object name '#haro_products'.
Это связано с тем, что временные таблицы доступны только в рамках сеанса, в котором они были созданы.
Глобальные временные таблицы
Иногда вам может понадобиться создать временную таблицу, доступную через соединения. В этом случае вы можете использовать глобальные временные таблицы.
В отличие от временной таблицы, имя глобальной временной таблицы начинается с двойного символа решетки(##).
Следующие операторы сначала создают глобальную временную таблицу с именем ##heller_products, а затем заполняют эту таблицу данными из таблицы production.products:
CREATE TABLE ##heller_products( product_name VARCHAR(MAX), list_price DEC(10,2) ); INSERT INTO ##heller_products SELECT product_name, list_price FROM production.products WHERE brand_id = 3;
Теперь вы можете получить доступ к таблице ##heller_products из любого сеанса.
Удаление временных таблиц
Автоматическое удаление
SQL Server автоматически удаляет временную таблицу при закрытии соединения, создавшего ее.
SQL Server удаляет глобальную временную таблицу после закрытия соединения, создавшего ее, и завершения запросов к этой таблице из других соединений.
Удаление вручную
Из соединения, в котором создана временная таблица, вы можете вручную удалить временную таблицу с помощью оператора DROP TABLE :
DROP TABLE ##table_name;
В этом руководстве вы узнали о временных таблицах SQL Server и о том, как эффективно их создавать и удалять.