用考网 > 计算机类 > 计算机等级 > 资讯 > 《数据库:利用SQLServer临时表表变量的区别表现》正文

数据库:利用SQLServer临时表表变量的区别表现

用考网【资讯】 编辑:家辉 发布时间:2015-09-14 17:03:00

  1994年,全国计算机等级考试由教育部考试中心推出,计算机等级考试三级最初分A、B类:A类考核计算机应用基础知识和计算机硬件系统开发的初步能力;B类考核计算机应用基础知识和计算机软件系统开发的初步能力。2002年考试中心对等级考试进行调整,将三级考试分为“PC技术”、“信息管理技术”、“数据库技术”和“网络技术”等四个类别,相应地降低了考试难度。2013年考试中心对等级考试再一次进行调整,将三级考试分为“网络技术”,“数据库技术”,“软件测试技术","信息安全技术","嵌入式系统开发技术"等五个类别,从2013年下半年开始实施2013版考试大纲,并首次实现全部科目无纸化考试。“数据库技术”考核数据库系统基础知识及数据库应用系统项目开发和维护的基本技能。

  以下是学习啦小编为大家整理的计算机三级《数据库技术》考前复习重点,供大家参考和学习。

  数据库:利用SQLServer临时表表变量的区别表现。

  CREATE TABLE dbo.#News ( News_id int NOT NULL, NewsTitle varchar(100), NewsContent

  varchar(2000), NewsDateTime datetime ) INSERT INTO dbo.#News (News_id, NewsTitle,

  NewsContent, NewsDateTime) VALUES (1,'BlueGreen', 'Austen', 200801, GETDATE()) SELECT

  利用表变量

  DECLARE @News table ( News_id int NOT NULL, NewsTitle varchar(100),

  NewsContent varchar(2000), NewsDateTime datetime ) INSERT INTO @News

  (News_id, NewsTitle, NewsContent, NewsDateTime) VALUES (1,'BlueGreen',

  'Austen', 200801, GETDATE()) SELECT News_id, NewsTitle, NewsContent,

  NewsDateTime FROM @News

  我们可以看到上面两种情况实现的是一样的效果,第一种利用SQL Server临时表的时候,临时表一般被创建后,如果在执行的时候,没有通过DROP Table的操作,第二次就不能再被创建,而定义表变量也不需要进行DROP Table的操作,一次执行完成后就会消失。

  其实在选择临时表还是表变量的时候,我们大多数情况下在使用的时候都是可以的,但一般我们需要遵循下面这个情况,选择对应的方式:

  1)使用表变量主要需要考虑的就是应用程序对内存的压力,如果代码的运行实例很多,就要特别注意内存变量对内存的消耗。我们对于较小的数据或者是通过计算出来的推荐使用表变量。如果数据的结果比较大,在代码中用于临时计算,在选取的时候没有什么分组的聚合,就可以考虑使用表变量。

  2)一般对于大的数据结果,或者因为统计出来的数据为了便于更好的优化,我们就推荐使用SQL Server临时表,同时还可以创建索引,由于临时表是存放在Tempdb中,一般默认分配的空间很少,需要对tempdb进行调优,增大其存储的空间。

  注:表变量虽然不支持索引,但是表变量支持主键阿,所以可以利用主键来替代索引。

  注:由于表变量不支持统计数据,因此在一个存储过程中使用表变量可以减少由于数据变化而导致的重新编译问题。

  注:表变量同时也不支持并行执行计划,因此对于大型的临时结果集,表变量也不是一个好的选择

  对于函数中不能支持SQL Server临时表是由于函数不能对函数作用域外部的资源状态造成永久性的更改,在SQLServer中也称为副作用(sideeffect)。不过如果在函数中使用大型的临时结果集是不推荐的,因为如果将这样的函数放置到一个查询中会造成很明显的性能问题,因此这种情况一般都采用存储过程之类的批处理脚本。

  对于动态脚本不支持表变量的原因是因为存储过程不接受表类型的参数。不过如果表变量的声明和赋值都在sp_executesql的参数中的话,sp_executesql就可以执行了,因为这个时候表变量就存在sp_executesql的stmt参数里面,不需要传入,例如下面的代码:(当然这样的实用性也就没有多少了)

  DECLARE @m nvarchar(max) SET @m = N"DECLARE @t TABLE (ID int);INSERT INTO @tVALUES(1);SELECT * FROM @t T" EXEC sp_executesql @m 以上的相关内容就是对利用SQL Server临时表与利用表变量比较,望你能有所收获。

Copyright @ 2006 - 2017 用考网 All Rights Reserved

用考网 版权所有 粤ICP备17065803号-4

回到顶部