数据库中临时表,表变量和CTE使用优势极其区别
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了数据库中临时表,表变量和CTE使用优势极其区别,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2229字,纯文字阅读大概需要4分钟。
内容图文
1 在写SQL时经常会用到临时表,表变量和CTE,这三者在使用时各有优势: 1. 临时表:分为局部临时表和全局临时表. 1.1局部临时表,创建时以#开头,在系统数据库tempdb中存储. 在当前的链接可见,链接断开则临时表就自动被释放,也可以手动drop table #tmptable 在使用
1 | 在写SQL时经常会用到临时表,表变量和CTE,这三者在使用时各有优势: |
1. 临时表:分为局部临时表和全局临时表.
1.1局部临时表,创建时以#开头,在系统数据库tempdb中存储. 在当前的链接可见,链接断开则临时表就自动被释放,也可以手动drop table #tmptable
在使用不同的链接同时创建相同的临时表时,互不影响,系统在tempdb中会自动附加以特定的session为标识的名字来区分. 常常在SP中使用,把需要操作的数据或者共同的数据取出放在临时表中,后续可以进行其他的操作(SELECT,UPDATE,DELETE,DROP等).
可以像创建永久表一样创建临时表:
CREATE TABLE #tmpTable ( ID INT, NAME VARCHAR(10), COMPANY VARCHAR(50) ) SELECT * FROM #tmpTable JOIN ... DROP TABLE #tmpTable
也可以使用INTO创建临时表,如查询EmployeeID=1的所有订单,放在临时表中,以备后续的处理.
SELECT E.EmployeeID,E.FirstName,E.LastName,O.OrderID,O.CustomerID,O.OrderDate INTO #tmpTable FROM Orders O JOIN Employees E ON O.EmployeeID=E.EmployeeID WHERE E.EmployeeID=1
1.2全局临时表,创建时以##开头. 在tempdb中存储,对所有的session都可见.
CREATE TABLE ##tmpTable2 ( ID INT, NAME VARCHAR(20), COMPANY VARCHAR(50) ) SELECT * FROM ##tmpTable2 JOIN ... DROP TABLE ##tmpTable2
2.表变量:在内存中存储,比临时表执行速度快. 在SP或者function越过有效scope之后会自动释放,不用显式的写drop.表变量只可用在DML的操作中,会有比较多的限制.
--直接声明表变量 DECLARE @varTable TABLE ( ID INT, NAME VARCHAR(20), COMPANY VARCHAR(50) ) --先创建表类型 CREATE TYPE [dbo].[T_TEMP] AS TABLE( ID INT, NAME VARCHAR(20), COMPANY VARCHAR(50) ) --在声明表变量 DECLARE @varTable T_TEMP
3.CTE(Common Table Expressions)通用表表达:是一个可以由定义语句引用的临时命名的结果集,在它们的简单形式中,可将 CTE 视为类似于非持续性类型视图的派生表.只须定义 CTE 一次,即可在查询中多次引用.
WITH CTE_NAME AS ( SELECT E.EmployeeID,E.FirstName,E.LastName,O.OrderID,O.CustomerID,O.OrderDate FROM Orders O JOIN Employees E ON O.EmployeeID=E.EmployeeID WHERE E.EmployeeID=1 ) SELECT * FROM CTE_NAME
CTE最强大之处在于递归查询,如要仔细研究可以参考微软的文章.
内容总结
以上是互联网集市为您收集整理的数据库中临时表,表变量和CTE使用优势极其区别全部内容,希望文章能够帮你解决数据库中临时表,表变量和CTE使用优势极其区别所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。