`
yinter
  • 浏览: 244072 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

临时表与表变量

阅读更多

今天用到了临时表与表变量,在网上查了些资料,也查了MSDN,写个工作记日,以后可能用得着。


临时表

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

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

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



临时表存储在TempDB数据库中,所有的使用此SQL Server 实例的用户都共享这个TempDB,因为我们应该确保用来存储TempDB数据库的硬盘有足够的空间,以使之能够自己的增长.最好能够存储在一个拥有独立硬盘控制器上.因为这样不存在和其它的硬盘I/O进行争用.

局部临时表

局部临时表不能够被其它连接所共享的原因其实是在SQL Server 2000中自动为局部临时表的表名后面加上了一个唯一字符来标识.如:

CREATE TABLE [#temp_test]
(
[id] [int],[name] [nvarchar](50),[age] int
)


CREATE TABLE [##temp_test]
(
[id] [int],[name] [nvarchar](50),[age] int
)


USE TempDB
GO


SELECT name FROM sysobjects WHERE name LIKE '%temp_test%'


table变量有以下优点:   
  1、table变量的行为类似于局部变量,有明确定义的作用域。该作用域为声明该变量的函数、存储过程或批处理。   
  在其作用域内,table变量可像常规表那样使用。该变量可应用于SELECT、INSERT、UPDATE和DELETE语句中用到表或表的表达式的地方。但是,table不能用在下列语句中: 
  INSERT INTO table_variable EXEC 存储过程。 
  SELECT select_list INTO table_variable语句。 
  在定义table变量的函数、存储过程或批处理结束时,自动清除table变量。
  2、在存储过程中使用表变量与使用临时表相比,减少了存储过程的重新编译量。
  3、涉及表变量的事务只在表变量更新期间存在。这样就减少了表变量对锁定和记录资源的需求。


1.表变量在内存中,临时表存放在硬盘上; 
2.用临时表要考虑锁不锁表的问题; 
3.数据量太大应该用临时表。


分享到:
评论

相关推荐

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

    资源名称:SQLServer中临时表与表变量的区别内容简介: 本文档主要讲述的是SQLServer中临时表与表变量的区别;希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看。资源截图: 资源太大,传百度网盘了,...

    SQLServer中临时表与表变量的区别.docx

    ### SQL Server 中临时表与表变量的区别 #### 一、临时表 临时表与常规的永久表非常相似,主要区别在于其创建位置和生命周期。在SQL Server中,临时表是在`tempdb`数据库中创建的,这意味着它们仅在这个特定会话...

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

    在SQL Server中,临时表和表变量是两种用于暂存数据的结构,它们在数据库操作中扮演着重要的角色。理解它们的区别有助于优化存储过程和提高性能。 临时表类似于永久表,但它们存在于Tempdb系统数据库中,仅在创建它...

    SQL SERVER临时表的语法.pdf

    4. **临时表与表变量的比较** - **表变量**:以@或@@前缀,@是局部的,@@是全局的系统变量。表变量在同一个批处理中有效,且不支持索引,因此在大量数据处理时可能性能较低。 - **临时表**:支持索引,适用于大...

    SQL SERVER临时表的语法.docx

    临时表与表变量的比较: 表变量以 `@` 或 `@@` 开头,其中 `@` 代表本地变量,`@@` 代表全局系统变量。表变量在内存中存储,执行速度快,但不记录日志,因此适用于小规模的数据集。而临时表则存储在 `tempdb` 数据库...

    SQL SERVER中表变量之妙用.pdf

    文章还提到了临时表与表变量的对比。临时表在使用时需要写入磁盘,因此在执行效率上相对较低,尤其是在处理大量数据时。与之相比,表变量不涉及磁盘I/O操作,因此在处理普通数据量的情况下,使用表变量更具有优势。 ...

    sql临时表相关介绍

    8. **解析与引用**:如果同时存在同名的本地和全局临时表,查询可能无法明确解析到哪个表,除非使用完全限定名(包括井字号)来指定。 临时表在处理一次性数据需求、复杂查询的中间结果存储以及避免多次计算重复...

    MySQL性能分析之临时表

    #### 一、临时表与磁盘临时表 在MySQL数据库管理系统中,**临时表**是一种特殊类型的表,主要用于存储中间结果集,它可以帮助执行一些复杂的查询操作,如`GROUP BY`、`DISTINCT`、某些`ORDER BY`以及`UNION`等操作...

    sqlserver 临时表的用法

    临时表与表变量是SQL Server中的两个相似概念,但它们之间有显著的区别。表变量的作用范围仅限于当前批处理或存储过程,不支持索引,而临时表可以创建索引,更适合处理大量数据和复杂的查询场景。 在优化查询性能...

    无法更新临时表的问题

    6. **环境变量**:VFP的环境变量如USER, WORKAREA等可能没有正确设置,这可能影响到临时表的使用。 7. **数据库连接**:如果连编的应用程序改变了数据库连接方式,比如使用了不同的数据库引擎或连接字符串,可能...

    Mysql临时表使用说明

    临时表仅在当前会话中可见,这意味着一旦客户端与服务器的连接断开,临时表及其所有数据将被自动删除,无需手动清理。这不仅简化了数据库管理,还避免了因忘记删除表而可能导致的资源浪费。 #### 临时表与内存存储 ...

    SQL Server 表变量和临时表的区别(详细补充篇)

    2. **存储过程重编译**:与临时表相比,表变量通常导致更少的存储过程重编译,从而提高性能。 3. **事务管理**:表变量的事务行为仅在更新数据时体现,因此锁和日志记录相对较少。 4. **回滚不影响**:由于表变量...

    Oracel储存过程用临时表

    临时表是数据库中的特殊表格,它的生命周期只存在于会话(Session)内,一旦会话结束,临时表及其数据都会被自动删除。这使得它们非常适合用于存储过程中的临时数据存储,不会对其他用户或会话产生影响。 创建临时...

    一个选查询后插入到一个临时表的oracle函数

    ### 一个选查询后插入到一个临时表的Oracle函数 #### 概述 在Oracle数据库环境中,函数是一种非常有用的数据库对象,它允许开发者封装复杂的逻辑并返回特定的结果。本文将详细解析一个特定的Oracle函数——`NS_...

    提高数据库查询效率

    - **临时表与表变量的使用**:对于频繁使用的数据集,可以使用临时表或表变量来提高性能。需要注意的是,表变量的索引有限,且创建和删除临时表会消耗系统资源。 - **一次性事件的处理**:对于一次性使用的数据,...

    sqlserver通用的删除服务器上的所有相同后缀的临时表

    临时表与表变量是SQL Server中两种不同的临时数据存储方式。临时表全局可见,可以在同一个会话中的多个批处理或存储过程中使用;而表变量仅在声明它的批处理或存储过程中可见,内存优化的表变量性能通常优于磁盘上的...

    sqlserver 循环临时表插入数据到另一张表

    sqlserver 循环临时表插入数据到另一张表 -- 声明变量 DECLARE @SupCode as varchar(100), @ProdCode as varchar(50), @PackLayer as varchar(50), @CodeStatus as varchar(50), @ProductId as varchar(50), @...

Global site tag (gtag.js) - Google Analytics