临时表分为局部和全局 分别是#开头和##开头
#开头的临时表只能在本回话中使用,当回话结束的时候创建的临时表会被删除
##开头的临时表可以在所有回话中使用,当sqlserver被重启的时候会被删除
无论是#开头的还是##开头的临时表都存在tempdb数据库中
我们可以通过以下语句测试
create table ##aa( a nvarchar(10))
打开tempdb我们可以看到我们刚创建的表
当我们把回话关闭的时候,刷新tempdb表,我们依然可以看到##aa,当我们把sqlserver服务重启的时候我们看到这个表并不存在了,tempdb又回到了最初的状态。
接下来我们去掉一个#试试
create table #aa( a nvarchar(10))
我们打开两个回话分别输入上面的代码执行,执行之后我们同样打开tempdb表,
我们可以看到我们刚才创建的#aa表,同时sqlserver根据我们不同的回话在#aa后面增加了不同的后缀,现在我们关闭回话,再次刷新tempdb表,可以看到两个临时表都被删除了。
临时表的创建
临时表在实际使用的时候我们可以通过 create table来创建,例如以上的代码;我们也可以通过 select into语句来创建临时表,例如
select a into #aa from table1
我们知道全局临时表在所有回话都可以用的,所以在创建的时候最好先判断这个临时表是否存在,然后再进行创建
临时表的删除
删除临时表我们可以通过
drop table ##aa
drop table #aa
的方式来删除
临时表使用
临时表在实际开发的过程当中当我们在存储过程当中需要存放一些临时的计算结果,而又没有实际的表提供给你可用的时候,临时表给开发人员提供了很大的便利;
临时表的使用可以降低语句的复杂度,当很多表关联的时候,我们可以降筛选度大的数据存放在临时表中,在通过临时表去和别的表关联,这样可以提高性能,但是要注意的是当数据量很大的时候,存放在临时表中就不是一个明智的选择,我们要根据实际的情况合理的使用临时表。