Просмотр текущих временных таблиц в SQL Server: решение
Быстрый ответ
Чтобы посмотреть список временных таблиц в активной сессии SQL Server, вы можете выполнить следующий запрос:
-- Поиск временных таблиц в сессии...
SELECT [name] FROM tempdb.sys.tables WHERE [name] LIKE '#%';
В результате появится перечень всех таблиц с уникальными системными приставками к их названиям.
Подробнее о временных таблицах
Исключим из рассмотрения системные объекты и сфокусируемся на пользовательских таблицах, используя для этого фильтр по полю type
:
-- Выводим только пользовательские таблицы
SELECT [name] FROM tempdb.sys.tables WHERE [name] LIKE '#%' AND type = 'U';
Если вы используете устаревший SQL Server 2000, вы можете применить sysobjects
:
-- Передача привета из прошлого
SELECT [name] FROM tempdb..sysobjects WHERE xtype = 'U' AND [name] LIKE '#%';
Учтите, что для работы с метаданными вам необходимы соответствующие права доступа.
Целевой поиск
Для отличия локальных и глобальных временных таблиц необходимо обратить внимание на их названия:
-- Различаем типы временных таблиц
SELECT [name] FROM tempdb.sys.tables WHERE [name] LIKE '#%'; -- Локальные таблицы
SELECT [name] FROM tempdb.sys.tables WHERE [name] LIKE '##%'; -- Глобальные таблицы
Проверить существование определённой временной таблицы можно с помощью функции OBJECT_ID
:
-- Проверяем наличие таблицы
IF OBJECT_ID('tempdb..#MyTempTable') IS NOT NULL
PRINT '#MyTempTable присутствует!';
ELSE
PRINT 'Такой таблицы нет...';
Мониторинг производительности
При возникновении проблем производительности, связанных с временными таблицами, вы можете использовать SQL Profiler.
Также для программиста будет полезно завести систему логов для отслеживания происходящих операций:
-- Запись о создании таблицы
CREATE TABLE devOpsLog (timestamp DATETIME, details NVARCHAR(MAX));
INSERT INTO devOpsLog SELECT GETDATE(), 'Создана #MyTempTable';
Особенности совместимости
В разных версиях SQL Server учет временных таблиц отличается:
- SQL Server 2000: Используем `sysobjects`.
- SQL Server 2005 и позднее: Предпочитаем `sys.tables`.
Будьте осторожны при переходе между версиями SQL Server и всегда проверяйте синтаксис и названия объектов.
Визуализация
Можно представить временные таблицы как павильоны на фестивале:
Фестиваль временных таблиц:
- 🎪: #tempTable1
- 🎪: #tempTable2
- 🎪: #tempLab3
- ...
Следующий запрос поможет вам ориентироваться среди "шатров":
-- Обзор всех временных "павильонов"
SELECT [name] FROM tempdb.sys.tables WHERE [name] LIKE '#%';
Для дифференциации "павильонов" вы можете воспользоваться следующими командами:
SELECT [name] FROM tempdb.sys.tables WHERE [name] LIKE '##%'; -- Глобальные
SELECT [name] FROM tempdb.sys.tables WHERE [name] LIKE '#%'; -- Локальные
Полезные материалы
- Временные таблицы в SQL Server – Simple Talk – Исчерпывающий обзор темы временных таблиц и их жизненного цикла.
- MSSQL Server Management Studio (SSMS) 2005 New Query Template – Stack Overflow – Обсуждение шаблонов запросов в SSMS 2005 на Stack Overflow.
- TABLES (Transact-SQL) – SQL Server | Microsoft Learn – Документация Microsoft по запросам к таблицам.
- temporary tables – SQLServerCentral Forums – Опыт использования временных таблиц на форуме SQL Server.
- DBCC CHECKALLOC (Transact-SQL) – SQL Server | Microsoft Learn – Инструкция по использованию DBCC для работы с ресурсами в SQL Server от Microsoft.