SQLServer 临时表的使用
临时表在Sqlserver数据库中,是非常重要的,下面就详细介绍SQL数据库中临时表的特点及其使用,仅供参考。
临时表与永久表相似,但临时表存储在tempdb中,当不再使用时会自动删除。临时表有两种类型:本地和全局。它们在名称、可见性以及可用性上有区别。
对于临时表有如下几个特点:
本地临时表就是用户在创建表的时候添加了“#”前缀的表,其特点是根据数据库连接独立。只有创建本地临时表的数据库连接有表的访问权限,其它连接不能访问该表;
不同的数据库连接中,创建的本地临时表虽然“名字”相同,但是这些表之间相互并不存在任何关系;在SQLSERVER中,通过特别的命名机制保证本地临时表在数据库连接上的独立性。
真正的临时表利用了数据库临时表空间,由数据库系统自动进行维护,因此节省了表空间。并且由于临时表空间一般利用虚拟内存,大大减少了硬盘的I/O次数,因此也提高了系统效率。
临时表在事务完毕或会话完毕数据自动清空,不必记得用完后删除数据。
本地临时表
本地临时表的名称以单个数字符号 (#) 打头;它们仅对当前的用户连接(也就是创建本地临时表的connection)是可见的;当用户从 SQL Server 实例断开连接时被删除。
例如我们在一个数据库连接中用如下语句创建本地临时表#Temp
数据库连接1:
CREATE TABLE #Temp
(
    id int,
    customer_name nvarchar(50),
    age int
)
然后同时启动数据库连接2,执行查询#Temp的操作
数据库连接2:
select * from #Temp
我们来看看数据库连接2的结果是什么?
数据库连接2:
结果显示,数据库连接2找不到表#Temp。这说明#Temp这张临时表,只是对创建它的数据库连接1可见,而对于数据库连接2来说是不可见的。
全局临时表
全局临时表的名称以两个数字符号 (##) 打头,创建后对任何数据库连接都是可见的,当所有引用该表的数据库连接从 SQL Server 断开时被删除。
例如我们在一个数据库连接中用如下语句创建全局临时表##Temp,然后插入三行数据
数据库连接1:
CREATE TABLE ##Temp
(
    id int,
    customer_name nvarchar(50),
    age int
)
INSERT INTO ##Temp VALUES(1,'老王',20),(2,'老张',30),(3,'老李',25)
接着我们在数据库连接2中,查询##Temp的数据
数据库连接2:
select * from ##Temp
数据库连接2结果如下
数据库连接2:
可以看到,数据库连接2可以成功访问到数据库连接1创建的全局临时表##Temp,但是如果我们现在关闭数据连接1,然后再执行数据库连接2的##Temp查询语句会发生什么呢?结果如下:
关闭数据库连接1,然后数据库连接2再次执行:
select * from ##Temp
我们发现关闭数据库连接1后,数据库连接2就找不到全局临时表##Temp了。这是因为数据库连接1被关闭后,数据库连接2此时也没有语句正在使用临时表##Temp,所以Sqlserver认为此时已经没有数据库连接在引用全局临时表##Temp了,就将##Temp释放掉了。
接下来,我们尝试在数据库连接2中对全局临时表##Temp持有事务中的排他锁(X锁)后,然后关闭数据库连接1.
数据库连接1:
CREATE TABLE ##Temp
(
    id int,
    customer_name nvarchar(50),
    age int
)
INSERT INTO ##Temp VALUES(1,'老王',20),(2,'老张',30),(3,'老李',25)
数据库连接2:
BEGIN TRAN
select * from ##Temp with(xlock)
关闭数据库连接1,然后数据库连接2执行:
select * from ##Temp
结果显示我们尽管关闭了数据库连接1,但是由于数据库连接2在事务中一直持有全局临时表##Temp的排他锁(X锁),所以临时表##Temp并没有随着数据库连接1的关闭而被释放掉,只要数据库连接2中启动的事务没有被回滚或提交,那么数据库连接2会一直持有临时表##Temp的排他锁,这时Sqlserver会认为还有数据库连接正在引用全局临时表##Temp,所以##Temp不会被释放掉。
查询数据并写入临时表:
select * into #tab from table;
删除临时表:
drop table #tab;
--------------------- 
作者:laizhixue 
来源:CSDN 
原文:https://blog.csdn.net/laizhixue/article/details/79798648 
版权声明:本文为博主原创文章,转载请附上博文链接!
SQLServer 临时表的使用的更多相关文章
- sqlserver 临时表、表变量、CTE的比较
		原文地址: sqlserver 临时表.表变量.CTE的比较 1.临时表 1.1 临时表包括:以#开头的局部临时表,以##开头的全局临时表. 1.2 存储 不管是局部临时表,还是全局临时表,都会放存 ... 
- Oracle、SqlServer——临时表
		一.oracle 1.概述: oracle数据库的临时表的特点: 临时表默认保存在TEMP中: 表结构一直存在,直到删除:即创建一次,永久使用: 不支持主外键. 可以索引临时表和在临时表基础上建立视图 ... 
- SqlServer 临时表
		SqlServer中临时表分为两种:一种是局部(本地)临时表,用#TableName表示.一种是全局(服务器)临时表,用##TableName表示. 创建临时表: 1. create table #T ... 
- SqlServer——临时表
		1.表的类型: SqlServer数据库中分为两个表:永久表.临时表:通过表名的前缀区分. 永久表:与物理文件.C# 中的静态类 类似,任何用户均可对其执行操作并且相互影响: 临时表:简单的说就是使用 ... 
- sqlserver临时表操作
		创建临时表 方法一: create table #临时表名(字段1 约束条件, 字段2 约束条件, ... 
- SqlServer 临时表 与 表变量(转)
		1. 表变量 变量都以@或@@为前缀,表变量是变量的一种,另外一种变量被称为标量(可以理解为标准变量,就是标准数据类型的变量,例如整型int或者日期型DateTime).以@前缀的表变量是本地的,因此 ... 
- SqlServer 临时表、表变量、函数 替代游标
		http://www.cnblogs.com/chongzi/archive/2011/01/19/1939106.html 临时表 存放在tempdb中 --存储过程中将多表连接结果写入到临时表中, ... 
- sqlserver临时表排序问题
		在2005和2008中,如果将有序的记录插入临时表,则从临时表查看出来的记录是有序的(不使用Order by也是有序状态) 但从2012开始,即使插入的记录集是有序的,查看出来的结果变得无序了,需要依 ... 
- 判断MS SQLSERVER临时表是否存在
		drop table #tempcitys select * into #tempcitys from hy_citys 上面的语句第一次运行的时候就肯定出错了,但第二次就不会.因为select * ... 
随机推荐
- 本地安装部署ActiveCollab
			ActiveCollab是一个非常易于使用.基于Web.开源的协作开发与项目管理工具. 我们公司一直在用这款工具,进行任务分配和时间填写,十分简便 ActiveCollab可以利用它轻松地搭建一个包括 ... 
- Windows性能计数器监控实践
			Windows性能计数器(Performance Counter)是Windows提供的一种系统功能,它能实时采集.分析系统内的应用程序.服务.驱动程序等的性能数据,以此来分析系统的瓶颈.监控组件的表 ... 
- javax.servlet.ServletException: Circular view path [index]: would dispatch back to the current handler URL [/pay/index] again. Check your ViewResolver setup!
			2019-08-08 17:12:03.544 ERROR 13748 --- [nio-8080-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Se ... 
- test20190504 行走
			行走(walk.cpp/c/pas) 题目描述 "我有个愿望,我希望走到你身边." 这是个奇异的世界,世界上的 n-1 条路联结起来形成一棵树,每条路有一个对应的权值 ci. 现在 ... 
- NET Framework 的泛型
			NET Framework 的泛型 泛型是具有占位符(类型参数)的类.结构.接口和方法,这些占位符是类.结构.接口和方法所存储或使用的一个或多个类型的占位符.泛型集合类可以将类型参数用作它所存储的对象 ... 
- Spring源码窥探之:Spring AOP初步使用
			AOP即面向切面编程.它的底层实际是用了spring的动态代理,具体是JDK的代理还是CGLIB的代理,就视情况而定了.本博客园仅仅作为平时记录,显得有些杂乱无章,如果想了解动态代理,设计模式,请访问 ... 
- drf框架 - 解析模块 | 异常模块 | 响应模块
			解析模块 为什么要配置解析模块 1)drf给我们提供了多种解析数据包方式的解析类 2)我们可以通过配置,来控制前台提交的哪些格式的数据后台在解析,哪些数据不解析 3)全局配置就是针对每一个视图类,局部 ... 
- POJ 3233 Matrix Power Series——快速幂&&等比&&分治
			题目 给定一个 $n \times n$ 的矩阵 $A$ 和正整数 $k$ 和 $m$.求矩阵 $A$ 的幂的和. $$S = A + A^2 + ... + A^k$$ 输出 $S$ 的各个元素对 ... 
- CentOS6.5 安装ES5.5
			一.CURL查看已开启的ES es5.5:elasticsearch-5.5.2.tar.gz下载,百度云地址 https://pan.baidu.com/s/17oFOQlePLtUhhJHxEPR ... 
- MongoDB collection Index DB 大小查询
			1.collection中的数据大小 db.collection.dataSize() 2.为collection分配的空间大小,包括未使用的空间db.collection.storageSize() ... 
