表变量和临时表的区别

 
临时表 
1、存储在tempdb中,类似于表的定义,即可以创建约束、索引、定义统计、主键和外键等,对临时表的操作,系统会产生并记录日志。临时表中同样存在锁的机制  

2、临时表分为本地和全局两种:本地临时表格式是以 # 前缀的,创建临时表的链接断开,临时表即消亡,也可以手动 drop 掉临时表。最好能手动 DROP一次。  

3、全局临时表是以 ## 前缀的,只有全部链接到全局临时表上的链接断开,全局临时表才消亡。  

4、如果存储过程中含有临时表,则 该存储过程不会被预编译。  

5、临时表创建格式为 create table #tablename(...)  

create table #tmp(id int identity(1,1) primary key,code varchar(32) default('123add'))

create nonclustered index idx_code_tmp on #tmp(code)

--select * from sys.indexes 
--order by type_desc desc,object_id 


  
表变量 
1、存储在内存中,表变量也存在 本地和全局 两种。
本地表变量 以 @前缀,只有在本地当前的用户连接中才可以访问。
全局表变量 以@@前缀,一般都是系统的全局变量(比如 @@error,@@rowcount 等)。
表变量中没有锁的机制。

2、表变量不能有非聚簇索引。表变量被访问使用的时候,系统是不产生日志记录的。表变量不存在默认值和约束  

3、如果存储过程中含有表变量,则该存储过程是会呗预编译的。  

表变量创建格式 declare @tablename table (id int primary key,code varchar(32))  



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值