浅析SQL server 临时表,浅析sqlserver
创建临时表,#代表局部临时表,##代表全局临时表。局部临时表和全局临时表的具体含义是什么呢?
举例说明一下比较清晰些,先来看下局部临时表,【新建查询】,在里面输入如下文本:
运行后,我们在此文件执行输入: select * from #tempTable, 执行后可以查询出如下的数据:
我们另外打开一个【新建查询】,就给其命名为新建查询2,在新建查询2中执行输入: select * from #tempTable,提示如下:
修改Sql 语句中的#tempTable 为 ##tempTable, 依照上述方法再次执行,会发现新建查询2中不再提示错误,能查出和新建查询1中同样的结果。Why?=>局部临时表仅在当前会话中可见;全局临时表在所有会话中都可见。
请注意,使用全局临时表后,不要忘记drop table 掉它。但是使用局部临时表,可以不进行此操作,在当前会话结束时,系统会自动回收创建的局部临时表。
临时表具体用法请参考
SQL Server里的临时表放在那里?
临时表与永久表相似,但临时表存储在 tempdb 中,当不再使用时会自动删除。
临时表有两种类型:本地和全局。它们在名称、可见性以及可用性上有区别。本地临时表的名称以单个数字符号 (#) 打头;它们仅对当前的用户连接是可见的;当用户从 SQL Server 实例断开连接时被删除。全局临时表的名称以两个数字符号 (##) 打头,创建后对任何用户都是可见的,当所有引用该表的用户从 SQL Server 断开连接时被删除。
例如,如果创建了 employees 表,则任何在数据库中有使用该表的安全权限的用户都可以使用该表,除非已将其删除。如果数据库会话创建了本地临时表 #employees,则仅会话可以使用该表,会话断开连接后就将该表删除。如果创建了 ##employees 全局临时表,则数据库中的任何用户均可使用该表。如果该表在您创建后没有其他用户使用,则当您断开连接时该表删除。如果您创建该表后另一个用户在使用该表,则 SQL Server 将在您断开连接并且所有其他会话不再使用该表时将其删除。
sqlserver怎建临时表?
表名前使用一个#号,临时表是局部的,使用两个#号,临时表是全局的,在断开连接后sql会自动删除临时表
create table #a
(
id int,
name varchar(50)
)
insert into #a(id,name) values(1,'123')
select * from #a
drop table #a
临时表除了名称前多了#号外,其他操作与普通表完全一样。
tb_Student是已建立好的表,我们通过临时表temp把tb_Student表中的内容复制到tb_lizi表中,可以使用如下的代码实现:
use mcf
SELECT * INTO #temp FROM tb_Student
SELECT * INTO tb_lizi FROM #temp
执行后断开sql连接并重新连接(也可以退出sq再l重新启动sql),发现tb_lizi表中的内容tb_Student表中的内容完全一致,实现了复制,同时我们没有用代码删除temp表,但mcf数据库中却没有temp表了,这是因为断开连接时sql自动删除了temp表