SqlServer入门知识-创建临时表

https://zhuanlan.zhihu.com/p/562721751

平时会直接在正常的库里面直接建表,好像和这个不一样,了解下。平时用时会直接在库里备份数据,然后删掉备份的表。属于数据备份,不是真正的临时表。

一、临时表的介绍

1、临时表与永久表操作相似

2、临时表是存储在tempdb数据库中,当不再使用时会自动删除。

3、临时表有两种类型:本地和全局。它们在名称、可见性以及可用性上有区别。

4、真正的临时表利用了数据库临时表空间,由数据库系统自动进行维护,因此节省了表空间。并且由于临时表空间一般利用虚拟内存,大大减少了硬盘的I/O次数,因此也提高了系统效率。

5、不同的数据库连接中,创建的本地临时表虽然“名字”相同,但是这些表之间相互并不存在任何关系;在SQLSERVER中,通过特别的命名机制保证本地临时表在数据库连接上的独立性。

6、临时表在事务完毕或会话完毕数据自动清空,不必记得用完后删除数据。

二、本地临时表与全局临时表

1、本地临时表

本地临时表就是用户在创建表的时候添加了“#”前缀的表,其特点是根据数据库连接独立。只有创建本地临时表的数据库连接有表的访问权限,其它连接不能访问该表;

本地临时表的名称以单个数字符号 (#) 打头;它们仅对当前的用户连接(也就是创建本地临时表的connection)是可见的;当用户从 SQL Server 实例断开连接时被删除。

2、全局临时表

全局临时表的名称以两个数字符号 (##) 打头,创建后对任何数据库连接都是可见的,当所有引用该表的数据库连接从 SQL Server 断开时被删除。

如果使用

BEGIN TRAN

select * from ##Temp with(xlock)

使用事务及排他锁with(xlock): 启动的事务没有被回滚或提交,那么数据库连接2会一直持有临时表##Temp的排他锁,这时Sqlserver会认为还有数据库连接正在引用全局临时表##Temp,所以##Temp不会被释放掉。

直到事务被提交,才会释放。

三、SqlServer 创建临时表

有几种方法:

(#代表局部临时表,如果想创建全局临时表,则将#改为##即可)

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

2、select * into #临时表名 from 真实的列

示例:

select * into #临时表名 from tblCustomer WHERE Type='潜在客户'

select 客户编号,客户名称 into #临时表名 from tblCustomer WHERE Type='潜在客户'

 

四、查询临时表

select * from #临时表名

 

五、删除临时表

drop table #临时表名;

可在删除前先判断它是否存在

if object_id('tempdb..#临时表名') is not null

drop table #临时表名;

 

六、使用临时表的示例

 

Drop table #tmpCust --删除临时表#tmpCust

create table #tmpCust --创建临时表#tmpCust

(

FId int IDENTITY (1,1) not null, --创建自动递增ID

FCustomCode varchar(50), --客户编码

FCustomName varchar(100), --客户名称

primary key FId) --设置FId为临时表主键

);

select @custName=FCustomName from #tmpCust --查询临时表tmpCust数据 给变量

truncate table #tmpCust --清空临时表tmpCust所有数据和约束

posted @ 2022-11-14 15:12  yinghualeihenmei  阅读(385)  评论(0编辑  收藏  举报