Табличные переменные создаются в памяти или в базе данных tempdb? То же самое для короткие временные таблицы?
В tempdb будет создана временная таблица, и вы можете легко проверить ее, запросив таблицу sysobjects в tempdb
example
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
Насколько я понимаю, как минимум структура табличной переменной всегда создается в TempDB. Затем, как указал SQLMenace , данные могут или не могут перетекать.
Согласно этой статье базы знаний Майкрософт :
Табличная переменная - это не только память. структура. Поскольку табличная переменная может содержать больше данных, чем может поместиться память, она должна иметь место на диске для хранения данных. Табличные переменные созданный в базе данных tempdb аналогичный во временные таблицы. Если память доступны как переменные таблицы, так и временные таблицы создаются и обрабатывается, пока находится в памяти (данные кеш).