表变量是在内存还是在tempdb中创建的?同样的 短临表?
答案 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。