一。临时表介绍

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

二、临时表分类

临时表分为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上面:

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

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

添加数据操作:

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

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

但是,如果你把现在的查询窗口关闭了,在重新打开,然后在在查询里输入,则会进行报错,提示 #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中,所以,在一定程度上,它还是会影响数据库执行时候的性能,也就是性能问题。
  • 当临时表做完了它的本职工作之后,临时表会自动删除。

sql server之临时表的更多相关文章

  1. sql Server中临时表与数据表的区别

    sql server 中临时表与数据表的区别 1.如何判断临时表和数据表已生成 --如何判断临时表是否已创建--- if exists(select * from tempdb..sysobjects ...

  2. 补充一下sql server(临时表)

    说明:(1).临时表其实是放在数据库tempdb里的一个用户表:(2).TempTableName必须带“#”,“#"可以是一个或者两个,以#(局部)或##(全局)开头的表,这种表在会话期间 ...

  3. [转]SQL Server中临时表与表变量的区别

    [转]http://blog.csdn.net/skyremember/archive/2009/03/05/3960687.aspx 我们在数据库中使用表的时候,经常会遇到两种使用表的方法,分别就是 ...

  4. sql server创建临时表的两种写法和删除临时表

    --创建.删除临时表 --第一种方式 create table #tmp(name varchar(255),id int) --第二种方式 select count(id) as storyNum ...

  5. SQL Server中临时表与表变量的区别

    我们在数据库中使用表的时候,经常会遇到两种使用表的方法,分别就是使用临时表及表变量.在实际使用的时候,我们如何灵活的在存储过程中运用它们,虽然它们实现的功能基本上是一样的,可如何在一个存储过程中有时候 ...

  6. SQL Server 2005 临时表

    with t as ( select * from t_pub_param ) select * from t SQL Server 2005 之后才可以使用,查询后临时表t会自动删除.

  7. SQL Server中临时表是在什么schema下的(转载)

    Specifying schema for temporary tables 问: I'm used to seeing temporary tables created with just the ...

  8. 【S】SQL SERVER检查临时表占用空间情况

    --检查已标记为需要删除的临时表select * from T_BAS_TEMPORARYTABLENAME; --所有系统创建的临时表及视图SELECT * FROM sys.tables WHER ...

  9. sql server 的临时表和表变量

    临时表 本地临时表 适合开销昂贵   结果集是个非常小的集合 -- Local Temporary Tables IF OBJECT_ID('tempdb.dbo.#MyOrderTotalsByYe ...

随机推荐

  1. 建工发债sql

    管理费用 为了得到科目名称,只好再从外面写一层 select a.*, (select b.subjname from bd_accsubj b where b.subjcode=a.scode an ...

  2. Socket Server-基于NIO的TCP服务器

    NIO主要原理及使用 NIO采取通道(Channel)和缓冲区(Buffer)来传输和保存数据,它是非阻塞式的I/O,即在等待连接.读写数据(这些都是在一线程以客户端的程序中会阻塞线程的操作)的时候, ...

  3. Spring Integration

    @ContextConfiguration directs Spring's test runner to locate a configuration file with the same name ...

  4. Disconf

    通常我们会做如下配置:(disconf 2.6.21) <!-- 一次扫描 --> <bean id="disconfMgrBean" class="c ...

  5. Apache配置文件服务器

    配置Apache文件服务器: apache配置文件服务器httpd.conf中这两个模块必须不被注释LoadModule autoindex_module modules/mod_autoindex. ...

  6. ORA-15025: could not open disk "/dev/asm***"--转载

    Symptoms: 打完补丁后,数据库报错ORA-15025,数据库无法启动. alert日志信息: Wed Jul22 16:26:57 2015 ORA-15025:could not open ...

  7. Redis 配置文件

    # Redis configuration file example. # # Note that in order to read the configuration file, Redis mus ...

  8. Nice Validator(Form验证)及Juery zTree控件

    http://niceue.com/validator/demo/match.php http://www.ztree.me/v3/demo.php#_603

  9. C++设计模式-TemplateMethod模板方法模式

    Template模板方法模式作用:定义一个操作中的算法的骨架.而将一些步骤延迟到子类中,模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 其关键是将通用算法(逻辑)封装在抽象基 ...

  10. CRLF和LF

    协作项目,开发环境不同(mac,window)构建过程中,命令行报错(expecting LF but only find CRLF) 打开git bash,输入 $ git config --glo ...