临时表操作总结

临时表概述

临时表与永久表相似,但临时表存储在 tempdb 中,当不再使用时会自动删除。

临时表有两种类型:本地和全局。它们在名称、可见性以及可用性上有区别。本地临时表的名称以单个数字符号 (#) 打头;它们仅对当前的用户连接是可见的;当用户从 SQL Server 实例断开连接时被删除。全局临时表的名称以两个数字符号 (##) 打头,创建后对任何用户都是可见的,当所有引用该表的用户从 SQL Server 断开连接时被删除。

例如,如果创建了 employees 表,则任何在数据库中有使用该表的安全权限的用户都可以使用该表,除非已将其删除。如果数据库会话创建了本地临时表 #employees,则仅会话可以使用该表,会话断开连接后就将该表删除。如果创建了 ##employees 全局临时表,则数据库中的任何用户均可使用该表。如果该表在您创建后没有其他用户使用,则当您断开连接时该表删除。如果您创建该表后另一个用户在使用该表,则 SQL Server 将在您断开连接并且所有其他会话不再使用该表时将其删除。

判断局部临时表是否存在,如果存在就删除它:

if object_id('tempdb.dbo.#TTempRequireQuery') is not null
drop table #TTempRequireQuery; 

 

/*- 一般来说,列位置不重要,处理的时候写列的列表就行了。如果一定要处理,则参考下面的示例-*/
--创建临时表
create table #temp(CODE varchar(50),长度 varchar(50),颜色 varchar(50), 合计 varchar(50))
--添加一列 alter table #temp add 新加字段 varchar(50)
go
--调整列的位置,把新加字段移动到长度的前面
EXEC sp_configure 'allow updates',1
RECONFIGURE WITH OVERRIDE
go
update a set
    colid=case when a.colid=c.colid then b.colid else a.colid+1 end,
    colorder=case when a.colid=c.colid then b.colid else a.colid+1 end
from tempdb.dbo.syscolumns a,
    (select colid from tempdb.dbo.syscolumns
    where id=object_id('tempdb.#temp')
        and name=N'长度') b,
    (select colid=max(colid) from tempdb.dbo.syscolumns
    where id=object_id('tempdb.#temp')) c
where a.id=object_id('tempdb.#temp')
    and a.colid>=b.colid
go

EXEC sp_configure 'allow updates',0
RECONFIGURE WITH OVERRIDE
GO

--显示结果
select * from #temp

--删除临时表
drop table #temp

/*--结果
CODE    新加字段    长度    颜色    合计
------- ----------- ------- ------- -------
(所影响的行数为 0 行)
--*/

posted @ 2010-12-01 10:26  Daniel_Lu  阅读(299)  评论(0编辑  收藏  举报