Sqlserver临时表
临时表说明:
SQL Server临时表是临时对象的一种,临时对象是以#或者##为前缀的,
诸如临时存储过程、临时函数等都是临时对象,临时对象都存储在tempdb数据库中。
当我们关闭数据库时,临时表会自动删除。临时表分为本地临时表和全局临时表,
一个#号为前缀的临时表是本地的,只有当前用户会话才可以访问,两个##为
前缀的临时表是全局的。本地临时表的数据库连接有表的访问权限,其它连接不能访问
该表;不同的数据库连接中,创建的本地临时表虽然"名字"相同,但是这些表之间
相互并不存在任何关系;在SQLSERVER中,通过特别的命名机制保证本地临时表在数
据库连接上的独立性,意思是你可以在不同的连接里使用相同的本地临时表名称。
全局临时表是用户在创建表的时候添加"##"前缀的表,其特点是所以数据库连接
均可使用该全局临时表,当所有引用该临时表的数据库连接断开后自动删除。
全局临时表相比本地临时表,命名上就需要注意了,与本地临时表不同的是,全
局临时表名不能重复。临时表利用了数据库临时表空间,由数据库系统自动进行维护
,因此节省了物理表空间。并且由于临时表空间一般利用虚拟内存,大大减少了硬盘的I/O次数,
因此也提高了系统效率。临时表在事务完毕或会话完毕数据库会自动清空,不必记得用完
后删除数据。
临时表创建:
Case 1: 使用CREATE TABLE创建临时表
CREATE TABLE {# | ##} temp_table_name (
column_name_1 data type CONSTRAINT,
column_name_2 data type CONSTRAINT,
.
.
.
column_name_n data type CONSTRAINT,
);
Case 2:使用SELECT INTO创建临时表
SELECT
columns_to_be_selected
INTO
{ # | ##} temp_table_name
FROM
table_name;
临时表的使用
1. 增删改查跟物料表是一样的
2. 需要主要其作用范围,比如在存储空间中使用下面语句,则会报对象名#temp无效,
是因为临时表的作用域在exec中,
exec('select IDENTITY(int,1,1) as ID into #temp from tbName' )
select * from #temp 改成
exec('select IDENTITY(int,1,1) as ID into #temp from tbName;select * from #temp ' )