`
huanghuaibin
  • 浏览: 66576 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

SQL临时表和永久表

    博客分类:
  • SQL
阅读更多

临时表与永久表相似,但临时表存储在 tempdb 中,当不再使用时会自动删除。
临时表有两种类型:本地和全局。它们在名称、可见性以 及可用性上有区别。本地临时表的名称以单个数字符号 (#) 打头;它们仅对当前的用户连接是可见的;当用户从 SQL Server 实例断开连接时被删除。全局临时表的名称以两个数字符号 (##) 打头,创建后对任何用户都是可见的,当所有引用该表的用户从 SQL Server 断开连接时被删除。
例如,如果创建了 employees 表,则任何在数据库中有使用该表的安全权限的用户都可以使用该表,除非已将其删除。如果数据库会话创建了本地临时表 #employees,则仅会话可以使用该表,会话断开连接后就将该表删除。如果创建了 ##employees 全局临时表,则数据库中的任何用户均可使用该表。如果该表在您创建后没有其他用户使用,则当您断开连接时该表删除。如果您创建该表后另一个用户在使用该 表,则 SQL Server 将在您断开连接并且所有其他会话不再使用该表时将其删除。

1、局部临时表(#开头)只对当前连接有效,当前连接断开时自动删除。   
2、全局临时表(##开头)对其它连接也有效,在当前连接和其他访问过它的连接都断开时自动删除。   
3、不管局部临时表还是全局临时表,只要连接有访问权限,都可以用drop table #Tmp(或者drop table ##Tmp)来显式删除临时表。   
使用全局临时表需要加上   
if object_id('tempdb..##临时表') is not null
drop table ##临时表
else
creeate table ##临时表..

 

 

SQL SERVER临时表的使用

drop table #Tmp   --删除临时表#Tmp
create table #Tmp --创建临时表#Tmp
(
    ID   int IDENTITY (1,1)     not null, --创建列ID,并且每次新增一条记录就会加1
    WokNo                varchar(50),  
    primary key (ID)      --定义ID为临时表#Tmp的主键     
);
Select * from #Tmp    --查询临时表的数据
truncate table #Tmp --清空临时表的所有数据和约束

相关例子:

Declare @Wokno Varchar(500) --用来记录职工号
Declare @Str NVarchar(4000) --用来存放查询语句
Declare @Count int --求出总记录数     
Declare @i int
Set @i = 0
Select @Count = Count(Distinct(Wokno)) from #Tmp
While @i < @Count
    Begin
       Set @Str = 'Select top 1 @Wokno = WokNo from #Tmp Where id not in (Select top ' + Str(@i) + 'id from #Tmp)'
       Exec Sp_ExecuteSql @Str,N'@WokNo Varchar(500) OutPut',@WokNo Output
       Select @WokNo,@i --一行一行把职工号显示出来
       Set @i = @i + 1
    End
临时表
可以创建本地和全局临时表。本地临时表仅在当前会话中可见;全局临时表在所有会话中都可见。

本地临时表的名称前面有一个编号符 (#table_name),而全局临时表的名称前面有两个编号符 (##table_name)。

SQL 语句使用 CREATE TABLE 语句中为 table_name 指定的名称引用临时表:

CREATE TABLE #MyTempTable (cola INT PRIMARY KEY)
INSERT INTO #MyTempTable VALUES (1)

如果本地临时表由存储过程创建或由多个用户同时执行的应用程序创建,则 SQL Server 必须能够区分由不同用户创建的表。为此,SQL Server 在内部为每个本地临时表的表名追加一个数字后缀。存储在 tempdb 数据库的 sysobjects 表中的临时表,其全名由 CREATE TABLE 语句中指定的表名和系统生成的数字后缀组成。为了允许追加后缀,为本地临时表指定的表名 table_name 不能超过 116 个字符。

除非使用 DROP TABLE 语句显式除去临时表,否则临时表将在退出其作用域时由系统自动除去:

当存储过程完成时,将自动除去在存储过程中创建的本地临时表。由创建表的存储过程执行的所有嵌套存储过程都可以引用此表。但调用创建此表的存储过程的进程无法引用此表。


所有其它本地临时表在当前会话结束时自动除去。


全局临时表在创建此表的会话结束且其它任务停止对其引用时自动除去。任务与表之间的关联只在单个 Transact-SQL 语句的生存周期内保持。换言之,当创建全局临时表的会话结束时,最后一条引用此表的 Transact-SQL 语句完成后,将自动除去此表。
在 存储过程或触发器中创建的本地临时表与在调用存储过程或触发器之前创建的同名临时表不同。如果查询引用临时表,而同时有两个同名的临时表,则不定义针对哪 个表解析该查询。嵌套存储过程同样可以创建与调用它的存储过程所创建的临时表同名的临时表。嵌套存储过程中对表名的所有引用都被解释为是针对该嵌套过程所 创建的表,例如:

CREATE PROCEDURE Test2
AS
CREATE TABLE #t(x INT PRIMARY KEY)
INSERT INTO #t VALUES (2)
SELECT Test2Col = x FROM #t
GO
CREATE PROCEDURE Test1
AS
CREATE TABLE #t(x INT PRIMARY KEY)
INSERT INTO #t VALUES (1)
SELECT Test1Col = x FROM #t
EXEC Test2
GO
CREATE TABLE #t(x INT PRIMARY KEY)
INSERT INTO #t VALUES (99)
GO
EXEC Test1
GO

下面是结果集:

(1 row(s) affected)

Test1Col   
-----------
1          

(1 row(s) affected)

Test2Col   
-----------
2          

当创建本地或全局临时表时,CREATE TABLE 语法支持除 FOREIGN KEY 约束以外的其它所有约束定义。如果在临时表中指定 FOREIGN KEY 约束,该语句将返回警告信息,指出此约束已被忽略,表仍会创建,但不具有 FOREIGN KEY 约束。在 FOREIGN KEY 约束中不能引用临时表。

考虑使用表变量而不使用临时表。当需要在临时表上显式地创建索引时,或多个存储过程或函数需要使用表值时,临时表很有用。通常,表变量提供更有效的查询处理。

分享到:
评论

相关推荐

    临时表操作详解SQL Server 实例

    临时表与永久表相似,但临时表存储在 tempdb 中,当不再使用时会自动删除。 临时表有两种类型:本地和全局。它们在名称、可见性以 及可用性上有区别。本地临时表的名称以单个数字符号 (#) 打头;它们仅对当前的用户...

    对比Oracle临时表和SQL Server临时表的不同点

    Oracle数据库创建临时表的过程以及和SQL Server临时表的不同点的对比的相关知识是本文我们主要要介绍的内容,接下来就让我们一起来了解一下这部分内容吧,希望能够对您有所帮助。 1.简介 Oracle数据库除了可以保存...

    存储过程中的临时表使用方法

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

    Sql Server临时表和游标的使用小结

    临时表与永久表相似,但临时表存储在 tempdb 中,当不再使用时会自动删除。 临时表有局部和全局两种类型 2者比较: 局部临时表的名称以符号 (#) 打头 仅对当前的用户连接是可见的 当用户实例断开连接时被自动删除...

    SQLServer中临时表与表变量的区别分析

     临时表与永久表相似,只是它的创建是在Tempdb中,它只有在一个数据库连接结束后或者由SQL命令DROP掉,才会消失,否则就会一直存在。临时表在创建的时候都会产生SQL Server的系统日志,虽它们在Tempdb中体现,是...

    Mysql临时表原理及创建方法解析

    这篇文章主要介绍了Mysql临时...临时表的表名可以和永久表的名字相同。 好处:可以利用临时表保存一些临时数据,断开会话自动清除数据 坏处: 1.与服务器意外断开会话,临时表将被删除。 2.临时表只对创建会话可见,

    PostgreSQLOracle风格的全局临时表

    一个库,用于在PostgreSQL数据库中模拟Oracle样式的永久临时表。

    Microsoft SQL Server 2005 Express Edition SP3

    如果您的计算机已安装 SQL Server 2000 管理工具和 SQL Server Express 的默认实例,则可以使用 SQL Server 安装程序安装 SQL Server 2000 的默认实例。但是,这样做会禁用已安装的 SQL Server Express 实例。因此,...

    SQL语法大全

    DROP TABLE 数据表名称 (永久性删除一个数据表) 4. 记录集对象的方法: rs.movenext 将记录指针从当前的位置向下移一行 rs.moveprevious 将记录指针从当前的位置向上移一行 rs.movefirst 将记录指针移到数据表第一...

    Oracle表空间设置和管理浅析

    Oracle 的表空间分为永久空间和临时表空间,同时又分为 smallfile tablespace和 bigfile tablespace。表空间管理是 Oracle dba的一项重要日常工作。 今天小编就从永久表空间管理和临时表空间管理两个维度,详细介绍...

    Oracle.Database.11g.DBA手册.完整中文 (97M) part1/2

     规划和部署永久表空间、临时表空间和大文件表空间  优化磁盘分配、CPU利用率、I/O吞吐率和SQL查询  开发功能强大的数据库管理应用程序  使用Oracle Flashback和Oracle Automatic Undo Management阻止人为错误.....

    Oracle.Database.11g.DBA手册.完整中文 (97M) part2/2

     规划和部署永久表空间、临时表空间和大文件表空间  优化磁盘分配、CPU利用率、I/O吞吐率和SQL查询  开发功能强大的数据库管理应用程序  使用Oracle Flashback和Oracle Automatic Undo Management阻止人为错误.....

    ORACLE11G宝典.rar 是光盘里面的内容,书太厚咧没法影印啊

     6.2.3 为用户设置表空间配额和临时表空间  6.3 创建表空间  6.3.1 创建(永久)表空间  6.3.2 创建大文件表空间  6.3.3 创建临时表空间  6.4 修改表空间  6.4.1 扩展表空间  6.4.2 修改属性、状态 ...

    Oracle如何更改表空间的数据文件位置详解

    表空间概述 Oracle的表空间属于Oracle中的存储结构,是一种用于存储数据库...临时表空间:存储数据库的中间执行过程,如:保存order by数据库排序,分组时产生的临时数据。操作完成后存储的内容会被自动释放。临时表空

    第二热电厂MIS系统数据库设计论文

    4.4.2 临时表空间 ERMISTEMP 105 4.4.3 索引表空间ERMISIDX 106 4.5 回退段SQL规程 106 4.6 数据库用户实体创建SQL规程 107 4.7 数据库例程创建SQL规程 107 4.8 数据库角色 107 4.9 角色创建SQL规程 107 4.10 角色...

    TransposingMatrix:详细说明可以在Red Gate SimpleTalk的链接“在SQL Server中轻松转换查询结果的方式” https中找到。

    :check_mark_button: 要将转置查询结果保存在临时表或永久表中。 + The table will be created inside the stored procedure, and after that, you have to drop the table manually. + There is no need to ...

    Oracle表空间的增删改

    1.永久性表空间,如system,users。一般保存表,视图,过程和索引等数据 2.临时性表空间,如temp。只用于保存系统中短期活动的数据 3.撤销表空间,如undo。用来帮助回退未提交的事务数据 创建表空间 通过create ...

    Oracle数据库基础学习资料整合

    tom(口令:tom,默认表空间 users,临时表空间 temp 无空间限额 第一次登 陆修改密码) 2、用户间系统权限授予 . 用户system将create table,create session系统权限授予用户a,并且带有with admin option选项...

    基于SpringBoot+MyBatis+MySQL实现的Android端崩溃日志后台管理系统

    结合您的实际情况,安装MySQL数据库,并执行dora.sql,创建需要的表 第二步:把项目打包成jar文件 使用maven脚本可以打包成jar文件 第三步:运行程序 java -jar dora-console-1.0-SNAPSHOT.jar //临时运行 ...

Global site tag (gtag.js) - Google Analytics