SqlServer入门知识-创建临时表
- 数据库
- 2023-01-22
一、临时表的介绍
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所有数据和约束
希望对您有用,可点赞 收藏 ,也可关注我们