Существуют ли переменные таблицы в памяти или в tempdb? То же самое для короткие временные таблицы?
Переменные таблицы, созданные и хранящиеся в памяти или в tempdb?
Ответ 1
В tempdb будет создана временная таблица, и вы можете легко ее проверить, запросив таблицу sysobjects в tempdb
Пример
create table #test (Item char(1), TimeSold varchar(20))
select * from tempdb.sys.sysobjects
where name like '#test%'
вы должны увидеть что-то с именем типа #test _______ 000000000905, но затем с более подчеркиванием
Если вам нужно проверить, существует ли временная таблица, см. также Как проверить, существует ли временная таблица на SQL Server
Структура переменной таблицы также создается в tempdb. Чтобы увидеть переменную таблицы, вы можете сделать что-то подобное, но нет гарантии, что кто-то не прокрался перед вами при создании своей переменной таблицы. Имя переменной таблицы будет чем-то вроде # 7BB1235D
declare @v table(id int)
select top 1 * from tempdb.sys.sysobjects
where name like '#%'
and name not like '%[_]%'
order by crdate desc
select * from @v
Подробнее см. здесь: http://support.microsoft.com/kb/305977
Ответ 2
Насколько я понимаю, как минимум, структура переменной таблицы всегда создается в TempDB. Затем, как указанном SQLMenace, данные могут или не могут перетекать.
Per эта статья базы знаний Майкрософт:
Табличная переменная не является только памятью состав. Поскольку переменная таблицы может содержать больше данных, чем может памяти, он должен иметь место на диске для хранения данных. Переменные таблицы созданных в базе данных tempdb к временным таблицам. Если память доступных, как переменных таблицы, так и создаются временные таблицы и обрабатываются в памяти (данные кэш).
Ответ 3
В MS SQL 2014 был введен специальный тип переменных таблицы "Переменные таблицы с оптимизацией памяти". И они не используют tempdb.