之间有什么区别?
CREATE TABLE #temp ( [ID] INT) INSERT INTO #temp SELECT ...
和
DECLARE @temp TABLE ( [ID] INT) INSERT @temp SELECT ...
在SQL Server 2008中?
临时表在大多数特性上都与普通表相似,只是它们进入TempDB而不是当前数据库,并且在有限范围后消失(取决于它们是基于会话的表还是全局的Temp表。记录到事务日志中,以及所有涉及性能的信息。otoh,您还可以像在普通表中一样向临时表中添加尽可能多的索引或视图,触发器或其他任何您想要的内容。
表变量是一种快捷的内存表(它们也使用temp DB)。对它们所做的更改不会记录下来(这可以提高性能)。但是您只能在其上获得一个索引,(由于无法在初始声明语句之后创建索引,因此可以在表变量上创建的唯一索引就是可以包含在初始表变量声明中的索引…
Declare @Tab Table (myKey integer Primary Key Not Null, data varchar(20))
由于这些特性,临时表是大型表(宽且具有多行)的最佳选择,并且/或者临时表在其生命周期内将经历多个访问模式,而表变量在需要非常狭窄的表时是最佳选择(仅限键表或仅具有一个数据列的键),将始终由该索引键访问…