在数据库中的TAble分 临时表和表变量:
如下:
CREATE TABLE ##CustomerAddress
(CustomerAddressID int IDENTITY(1,1),
AddressType char(4) NOT NULL,
PrimaryAddressFlag bit NOT NULL,
CountryID int NULL)DECLARE @CustomerAddress TABLE
(CustomerAddressID int IDENTITY(1,1),
AddressType char(4) NOT NULL,
PrimaryAddressFlag bit NOT NULL,
CountryID int NULL)临时表是存放在tempdb,而表变量是存放在mem中?对么?
还想知道以上2种方式分别是在什么情形下使用的?
如下:
CREATE TABLE ##CustomerAddress
(CustomerAddressID int IDENTITY(1,1),
AddressType char(4) NOT NULL,
PrimaryAddressFlag bit NOT NULL,
CountryID int NULL)DECLARE @CustomerAddress TABLE
(CustomerAddressID int IDENTITY(1,1),
AddressType char(4) NOT NULL,
PrimaryAddressFlag bit NOT NULL,
CountryID int NULL)临时表是存放在tempdb,而表变量是存放在mem中?对么?
还想知道以上2种方式分别是在什么情形下使用的?
解决方案 »
- sql server2005中reporting service 用邮件订阅发送失败的问题
- SQL Server 2005 中怎么取出除第一行以外的所有行?
- 局域网通过IP访问本机Sql Server 2000 失败。
- 高手帮忙设计一个sql语句,蛮怪的一个问题
- 請問 行轉列 和 交叉表有什麼不同它們一般在什麼樣的情況下使用???
- 急...... ACCESS中把一个表误 Deleter掉了 请问如何找回数据。
- 如果禁止其他管理员查看数据库
- 问一个初级的问题
- insert into b (col1,col2,col3) select col1,col2,col3 from a where b.col4=a.col4,出错,哪错了?
- 关于DTS的效率问题
- SQL里面怎么实现分数的计算阿?
- 求助!如何快速写出sql语句?
跟一般表不一样的是, 临时表虽然在tempdb中显现, 实际上也是在内存中分配的, 除非内存不够的时候, 也可能分配在硬盘里, 但用户在硬盘里肯定找不到.表变量: 就跟临时变量一样, 作用范围非常狭窄, 出了batch就玩完. (一个batch就是一段在SSMS里以GO结束的query组, 或者是一个存储过程). 表变量不能被主动drop掉.
跟临时表一样的是, 表变量也存在在tempdb数据库中, 表变量可以有一个primary key, 但不能生成索引, 也不能有column statistics, 所以对大数据的表来说, 表变量可能不大合适.
Table VariablesCTE(common table expression)
CTE与其说是一种表, 不如说是一种视图. 如果你仔细研究一下CTE的excution plan的话, 就可以发现很象C语言中的宏(macro)一样, 只是方便写代码而已.
CTE
而表变量,可以用在函数中
说的比较详细
2. 任何有临时表的过程都不能被预编译(pre-compiled),但是有表变量的过程的execution plan却有可能被预先生成.所以从这个意义来看, 表变量的过程要比临时表的过程速度要快.
3. 表变量跟普通变量一样, 在内层的存储过程和exec(string)过程中是不可见的(临时变量则可以, 几个有个大虾还专门发贴庆贺过这件事), 所以表变量也不能用在insert/exec语句里.