表变量是在内存中还是在tempdb中创建和保存的?

时间:2010-08-18 13:18:21

标签: sql sql-server tsql table-variable

表变量是在内存还是在tempdb中创建的?同样的 短临表?

3 个答案:

答案 0 :(得分:13)

临时表将在tempdb中创建,您可以通过查询tempdb中的sysobjects表轻松检查它

例如

create table #test (Item char(1),  TimeSold varchar(20))

select * from tempdb.sys.sysobjects
where name like '#test%'

你应该看到像#test _______ 000000000905这样的名字,但后面会有更多的下划线

如果您需要检查是否存在临时表,请参阅How Do You Check If A Temporary Table Exists In SQL Server

Table变量的结构也是在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

答案 1 :(得分:3)

我的理解是,至少,表变量的结构总是在TempDB中创建。然后,作为pointed out by SQLMenace,数据可能会或可能不会溢出。

this Microsoft Knowledge Base Article

  

表变量不仅仅是内存   结构体。因为一个表变量   可能包含的数据超出了可以容纳的数据   内存,它必须在磁盘上有一个位置   存储数据。表变量是   在tempdb数据库中创建的类似   到临时表。如果记忆是   可用,表变量和   创建临时表   在内存中处理(数据   高速缓冲存储器)。

答案 2 :(得分:1)

在MS SQL 2014中引入了特殊类型的表变量“Memory-Optimized Table Variables”。并且他们不使用tempdb。

请参阅https://msdn.microsoft.com/en-us/library/dn535766.aspx