加入收藏 | 设为首页 | 会员中心 | 我要投稿 常州站长网 (https://www.0519zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 系统 > 正文

sql的临时表和表变量区别在哪?一文带你区分

发布时间:2022-04-26 09:09:05 所属栏目:系统 来源:互联网
导读:sql的临时表和表变量不同在哪?对新手来说,可能对临时表和表变量不是很了解,对此这篇文章就给大家介绍sql的临时表和表变量的特征、使用、以及它们的区别,感兴趣的朋友就继续往下看吧。 一、表变量 表变量在SQL Server 2000中首次被引入。表变量的具体定义
        sql的临时表和表变量不同在哪?对新手来说,可能对临时表和表变量不是很了解,对此这篇文章就给大家介绍sql的临时表和表变量的特征、使用、以及它们的区别,感兴趣的朋友就继续往下看吧。
 
    一、表变量
 
  表变量在SQL Server 2000中首次被引入。表变量的具体定义包括列定义,列名,数据类型和约束。而在表变量中可以使用的约束包括主键约束,唯一约束,NULL约束和CHECK约束(外键约束不能在表变量中使用)。定义表变量的语句是和正常使用Create Table定义表语句的子集。只是表变量通过DECLARE @local_variable语句进行定义。
 
  表变量的特征:
    1.表变量拥有特定作用域(在当前批处理语句中,但不在任何当前批处理语句调用的存储过程和函数中),表变量在批处理结束后自动被清除。
    2.表变量较临时表产生更少的存储过程重编译。
    3.针对表变量的事务仅仅在更新数据时生效,所以锁和日志产生的数量会更少。
    4.由于表变量的作用域如此之小,而且不属于数据库的持久部分,所以事务回滚不会影响表变量。
 
  表变量可以在其作用域内像正常的表一样使用。更确切的说,表变量可以被当成正常的表或者表表达式一样在SELECT,DELETE,UPDATE,INSERT语句中使用,但是表变量不能在类似"SELECT select_list INTO table_variable"这样的语句中使用。而在SQL Server2000中,表变量也不能用于INSERT INTO table_variable EXEC stored_procedure这样的语句中。
 
  表变量不能做如下事情:
    1.虽然表变量是一个变量,但是其不能赋值给另一个变量。
    2.check约束,默认值和计算列不能引用自定义函数。
    3.不能为约束命名。
    4.不能Truncate表变量。
    5.不能向标识列中插入显式值(也就是说表变量不支持SET IDENTITY_INSERT ON)
 
   下面来玩玩表变量吧。
 
  定义一个表变量,插入一条数据,然后查询:
DECLARE @tb1 Table
  (
   Id int,
   Name varchar(20),
   Age int
  )
 
  INSERT INTO @tb1 VALUES(1,'刘备',22)
 
  SELECT * FROM @tb1
 
  更多的不允许,请查看上面的要求。
 
    二、临时表
 
    在深入临时表之前,我们要了解一下会话(Session),一个会话仅仅是一个客户端到数据引擎的连接。在SQL Server Management Studio中,每一个查询窗口都会和数据库引擎建立连接。一个应用程序可以和数据库建立一个或多个连接,除此之外,应用程序还可能建立连接后一直不释放知道应用程序结束,也可能使用完释放连接需要时建立连接。

(编辑:常州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读