Переменные таблицы, созданные и хранящиеся в памяти или в 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.

См. https://msdn.microsoft.com/en-us/library/dn535766.aspx