表变量是在内存中还是在 tempdb 中创建的?短临时表也一样?
问问题
9007 次
3 回答
13
将在 tempdb 中创建一个临时表,您可以通过查询 tempdb 中的 sysobjects 表轻松检查它
例子
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
于 2010-08-18T13:18:59.737 回答
3
我的理解是,表变量的结构至少总是在 TempDB 中创建。然后,正如SQLMenace 所指出的,数据可能会溢出,也可能不会溢出。
表变量不是纯内存结构。因为表变量可能包含比内存容量更多的数据,所以它必须在磁盘上有一个位置来存储数据。表变量在 tempdb 数据库中创建,类似于临时表。如果内存可用,则在内存(数据缓存)中创建和处理表变量和临时表。
于 2010-08-18T13:37:11.987 回答
2
在 MS SQL 2014 中引入了特殊类型的表变量“内存优化表变量”。他们不使用 tempdb。
于 2015-02-19T09:14:57.853 回答