sql server之临时表

时间:2021-07-27 01:12:27

一。临时表介绍

临时表在运行被创建的,虽说它的名字叫做临时表,可是对它的操作和我们平时操控表的操作基本一样, 比如最简单增、删、改、查等等。但是,需要注意的是临时表的创建是有范围限制的。

二、临时表分类

临时表分为2种,一种是本地临时表,另外一种就是全局临时表。

2.1本地临时表

以一个井号 (#) 开头的那些表名。只有在创建本地临时表的连接上才能看到这些表,链接断开时临时表即被删除(本地临时表为创建它的该链接的会话所独享)或者这样说局部临时表是有当前用户创建的,并且只有当前用户的会话才可以访问

2.2全局临时表

以两个井号 (##) 开头的那些表名。在所有连接上都能看到全局临时表或者这样说只要这个全局临时表存在,那么用户创建会话后对所有的用户都是可见的。如果在创建全局临时表的连接断开前没有显式地除去这些表,那么只要所有其它任务停止引用它们,这些表即被除去。当创建全局临时表的连接断开后,新的任务不能再引用它们(换句话说旧的任务还何以引用)。当前的语句一执行完,任务与表之间的关联即被除去;因此通常情况下,只要创建全局临时表的连接断开,全局临时表即被除去。

三。临时表的创建

3.1 创建本地临时表

方法一:

create table #临时表名(字段1 约束条件,
字段2 约束条件,
.....)

方法二:
select * into #临时表名 from 你的表;

代码如下:

Create table #Users(ID int,UserName varchar(50),Password varchar(50),RegisterDate Datetime);

上面这段代码很简单,也很好理解,因为有一个# 所以它表示创建的是本地临时表。

那这个临时表创建之后,它被放到哪里了呢?它在tempdb表中的Temporary Tables 中,意思很明了 就是“临时”的意思。

比如在我的SQL Server上面:

sql server之临时表

画黄色那个就是路径,有一条长长的线条,然后后面跟着数字!~对,你没错 这就是临时表的表名。

临时表的全名由 CREATE TABLE 语句中指定的表名和系统生成的数字后缀组成。为了允许追加后缀,为本地临时表指定的 table_name 不能超过 116 个字符。

添加数据操作:

insert into #Users values(1,'Lan','123456','2011.04.23')

通过“Select * from #Users”语句,执行查询 如下结果:

sql server之临时表

但是,如果你把现在的查询窗口关闭了,在重新打开,然后在在查询里输入,则会进行报错,提示 #Users无效。因为本地临时表只是用在当前用户的当前连接中。所以如果当前的连接退出,会自动销毁自己的表。

3.2创建全局临时表

方法一:

create table ##临时表名(字段1 约束条件,
字段2 约束条件,
.....)

方法二:
select * into ##临时表名 from 你的表;

全局临时表的代码基本和本地临时的代码一致,唯一的区域是,本地临时表的表明前面是一个#,而全局临时表的表名是2个##。

如:

Create Table ##Users(ID int,UserName varchar(50),Password varchar(50));

它也存储在老地方----Temporary Tables中,

四。什么时候用临时表及注意事项

在下面的3个场景中,可以考虑用到临时表:

  • 在存储过程中,我们需要对大量数据进行操作
  • 这是游标使用的替代的解决方案,我们可以把结果输入到临时表中,然后在在从临时表中抽取我们所需要的数据。
  • 有一个复杂的comple操作的时候,也可以考虑用临时表。

注意事项:

  • 在SQL Server中,临时表是被创建在Temporary的tempdb中,所以,在一定程度上,它还是会影响数据库执行时候的性能,也就是性能问题。
  • 当临时表做完了它的本职工作之后,临时表会自动删除。