转载:数据库中临时表,表变量和CTE使用优势极其区别
2010-03-25 23:03
323 查看
1 | 在写SQL时经常会用到临时表,表变量和CTE,这三者在使用时各有优势: |
1.1局部临时表,创建时以#开头,在系统数据库tempdb中存储. 在当前的链接可见,链接断开则临时表就自动被释放,也可以手动drop table #tmptable
在使用不同的链接同时创建相同的临时表时,互不影响,系统在tempdb中会自动附加以特定的session为标识的名字来区分. 常常在SP中使用,把需要操作的数据或者共同的数据取出放在临时表中,后续可以进行其他的操作(SELECT,UPDATE,DELETE,DROP等).
可以像创建永久表一样创建临时表:
CREATE TABLE#tmpTable ( IDINT, NAMEVARCHAR(10), COMPANYVARCHAR(50) ) SELECT*FROM#tmpTableJOIN... DROPTABLE#tmpTable
也可以使用INTO创建临时表,如查询EmployeeID=1的所有订单,放在临时表中,以备后续的处理.
SELECTE.EmployeeID,E.FirstName,E.LastName,O.OrderID,O.CustomerID,O.OrderDate INTO#tmpTable FROMOrders OJOINEmployees EONO.EmployeeID=E.EmployeeID WHEREE.EmployeeID=1
1.2全局临时表,创建时以##开头. 在tempdb中存储,对所有的session都可见.
CREATETABLE##tmpTable2 ( IDINT, NAMEVARCHAR(20), COMPANYVARCHAR(50) ) SELECT*FROM##tmpTable2JOIN... DROPTABLE##tmpTable2
2.表变量:在内存中存储,比临时表执行速度快. 在SP或者function越过有效scope之后会自动释放,不用显式的写drop.表变量只可用在DML的操作中,会有比较多的限制.
代码
WITHCTE_NAME AS ( SELECTE.EmployeeID,E.FirstName,E.LastName,O.OrderID,O.CustomerID,O.OrderDate FROMOrders OJOINEmployees EONO.EmployeeID=E.EmployeeID WHEREE.EmployeeID=1 ) SELECT*FROMCTE_NAME
CTE最强大之处在于递归查询,如要仔细研究可以参考微软的文章.
http://space.itpub.net/16436858/viewspace-629908
相关文章推荐
- 转:数据库中临时表,表变量和CTE使用优势极其区别
- 数据库中临时表,表变量和CTE使用优势极其区别
- 数据库中临时表,表变量和CTE使用优势极其区别
- 数据库中暂时表,表变量和CTE使用优势极其差别
- 数据库中临时表、表变量和CTE使用优劣对比
- 数据库中临时表、表变量和CTE使用优劣对比
- 转载:SQL Server中临时表与表变量的区别
- 转载:SQL Server中临时表与表变量的区别
- Java_类和对象(完美总结)_转载_覆盖和隐藏的区别,覆盖就不能使用了,而隐藏提供全局方法名或者全局变量名还可以使用
- 【转载】SQL Server中的临时表和表变量的区别
- 临时表与表变量的区别和使用方法
- 创建数据库普通临时表和创建数据库全局变量表和俩者的区别
- 使用临时表与声明一个表数据类型的变量有什么区别
- Sqlite中使用SQL与其他数据库的区别
- Debian中几个bash初始化脚本使用区别--【转载】
- SQL Server中临时表与表变量的区别
- SQL Server中临时表与表变量的区别
- SQL Server中临时表与表变量的区别
- 数据库中使用外键和不使用外键有什么区别
- oracle中的全局数据库名、环境变量和sid的区别