最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

数据库中临时表,表变量和CTE使用优势极其区别

来源:动视网 责编:小采 时间:2020-11-09 14:39:34
文档

数据库中临时表,表变量和CTE使用优势极其区别

数据库中临时表,表变量和CTE使用优势极其区别:1 在写SQL时经常会用到临时表,表变量和CTE,这三者在使用时各有优势: 1. 临时表:分为局部临时表和全局临时表. 1.1局部临时表,创建时以#开头,在系统数据库tempdb中存储. 在当前的链接可见,链接断开则临时表就自动被释放,也可以手动drop table #tm
推荐度:
导读数据库中临时表,表变量和CTE使用优势极其区别:1 在写SQL时经常会用到临时表,表变量和CTE,这三者在使用时各有优势: 1. 临时表:分为局部临时表和全局临时表. 1.1局部临时表,创建时以#开头,在系统数据库tempdb中存储. 在当前的链接可见,链接断开则临时表就自动被释放,也可以手动drop table #tm


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使用优势极其区别:1 在写SQL时经常会用到临时表,表变量和CTE,这三者在使用时各有优势: 1. 临时表:分为局部临时表和全局临时表. 1.1局部临时表,创建时以#开头,在系统数据库tempdb中存储. 在当前的链接可见,链接断开则临时表就自动被释放,也可以手动drop table #tm
推荐度:
标签: 使用 区别 临时
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top