sql 临时表和表变量

临时表内涵:以#开头的局部临时表,以##开头的全局临时表。存储:存放在tempdb数据库(包含 局部临时表,全局临时表)。作用域: 局部临时表:对当前连接有效,只在创建它的存储过度、批处理、动态语句中有效,类似于C语言中局部变量的作用域。 全局临时表:在所有连接对它都结束引用时,会被删除,对创建者来说,断开连接就是结束引用;对非创建者,不再引用就是结束引用。最好在用完后,就通过drop table 语句删除,及时释放资源。特性:能和普通表一样定义约束和创建索引,有数据分布的统计信息,开销和普通的表一样。使用场景:数据量小直接当做中间表使用,数据量较大可以通过优化提高查询效率,对于复杂的查询可以将中间结果放在临时表中以固化执行计划(专治执行计划走错)
if(object_id('tempdb..#t')is not null)
drop table #t
go
select top 1000 * into #t from [dbo].[WeChatInfo]
--drop table #t
select * from #t

却别: select into from要求目标表(destTbl)不存在,因为在插入时会自动创建。 
insert into select from要求目标表(destTbl)存在,由于目标表已经存在,所以我们除了插入源表(srcTbl)的字段外,还可以插入常量,如例中的:3。
表变量存储:表变量存放在tempdb数据库中。作用域:和普通的变量一样,在定义表变量的存储过程、批处理、动态语句、函数结束时,会自动清除。特性:可以有主键,但不能直接创建索引,也没有任何数据的统计信息。使用场景:小数据量(百条以内)注意:表变量不受事务的约束,下面的DEMO会演示。

declare @ordertable(ID int,Namevarchar(20))
declare @Detailtable(ID int,Pricefloat)

insert into@order(ID,Name) values(1,'aa'),(2,'bb'),(3,'cc')
insert into@Detail(ID,Price) values(1,10.5),(2,12.3),(4,5.9)

select *from @order
select * from @Detail


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值