【发布时间】:2011-08-09 04:54:11
【问题描述】:
我们客户的数据库管理员要求我们不要在报告存储过程 (#Table) 中使用临时表,而是使用表变量。
表变量比临时表效率低吗?
另外,如果我创建一个表为#table,而不是##table,则带有一个# 的表是一个会话表,而不是全局的##,对吗?当stored procedure 完成时,你不做DROP TABLE #table ...#table 仍然存在吗?如果它是基于会话的,那么我还能再次访问它吗?
【问题讨论】:
-
注意:表变量没有统计信息,不参与事务。要记住的事情。
-
很多人错误地认为表变量总是在内存中,而临时表进入 tempdb 并访问磁盘。这些都不是绝对正确的(它们实际上都进入 tempdb,如果可能,两者都将留在内存中,如果需要,两者都会溢出到磁盘)