补充一下sql server(临时表)

时间:2023-11-09 19:17:32

说明:
(1)、临时表其实是放在数据库tempdb里的一个用户表;
(2)、TempTableName必须带“#”,“#"可以是一个或者两个,以#(局部)或##(全局)开头的表,这种表在会话期间存在,会话结束则自动删除;
(3)、如果创建时不以#或##开头,而用tempdb.TempTable来命名它,则该表可在数据库重启前一直存在。

创建临时表
       方法一:
         create table #临时表名(字段1 约束条件,
                          字段2 约束条件,
                      .....)
           create table ##临时表名(字段1 约束条件,
                             字段2 约束条件,
                        .....)
        方法二:
                  select * into #临时表名 from 你的表;
           select * into ##临时表名 from 你的表;
        注:以上的#代表局部临时表,##代表全局临时表

查询临时表
         select * from #临时表名;
           select * from ##临时表名;

删除临时表
         drop table #临时表名;
           drop table ##临时表名;

    说明:

      DROP  TABLE 语句显式除去临时表,否则临时表将在退出其作用域时由系统自动除去:     
      (1)、当存储过程完成时,将自动除去在存储过程中创建的本地临时表。由创建表的存储过程执行的所有嵌套存储过程都可以引用此表。但调用创建此表的存储过程          的进程无法引用此表;
      (2)、所有其它本地临时表在当前会话结束时自动除去;
      (3)、全局临时表在创建此表的会话结束且其它任务停止对其引用时自动除去。任务与表之间的关联只在单个Transact-SQL语句的生存周期内保持。换言之,当创          建全局临时表的会话结束时,最后一条引用此表的Transact-SQL语句完成后,将自动除去此表。

示例代码:

    

(1)创建

use testdb

--创建局部临时表 
create table #tmpStudent(Tid int,Name varchar(50),Age int) insert into #tmpStudent values('xiaowang',25) select * from #tmpStudent --创建局部临时表 另一种写法
select *  into #tmpStudent from student select * from #tmpStudent

第二种创建方法:

create table tempdb.MyTempTable(Tid int) --有对应权限才可以这么写

(2)删除

drop table #tmpStudent

总结:

Sql Server临时表的作用域:
       临时表与永久表相似,只是它的创建是在Tempdb中,它只有在一个数据库连接结束后或者由SQL命令DROP掉,才会消失,否则就会一直存在。临时表在创建的时候都会产生SQL Server的系统日志,虽它们在Tempdb中体现,是分配在内存中的,它们也支持物理的磁盘,但用户在指定的磁盘里看不到文件。  www.2cto.com  
  临时表分为本地和全局两种,本地临时表的名称都是以“#”为前缀,只有在本地当前的用户连接中才是可见的,当用户从实例断开连接时被删除。全局临时表的名称都是以“##”为前缀,创建后对任何用户都是可见的,当所有引用该表的用户断开连接时被删除。 
以上内容全来自网络抄袭,谢谢观赏!