SQL SERVER学习笔记:临时表与表变量

本文主要摘自徐海蔚的《Microsoft SQL SERVER企业级平台管理实践》

表变量可以作为存储过程的返回参数,而临时表不行。(存疑?表值参数只在SQL SERVER2008才开始支持,并且限制很多,要首先定义表类型)

use [test]
go

create type [user] as table(id int,name varchar(50));
go

create procedure test_prd
@u [user] readonly
as
begin
	select * from @u;
end
go

declare @u [user];
insert into @u(id,name) values(1,'zhang3');
exec test_prd @u;
go

drop procedure test_prd;
go

drop type [user];
go

临时表跟普通的表一样,SQL SERVER会维护其统计信息,以得到合适的执行计划;也可以在上面建立索引。而表变量既不能建索引,也不会有统计信息;SQL SERVER在做执行计划的时候,总是认为表变量里的数据量只有很少的几行。

因此,表变量的好处是维护成本很低,大量并发使用时系统开销要比临时表低。但因为缺乏统计信息,只适合存放少量数据

而临时表功能和普通表接近,能够为大数据量做优化;缺点是维护成本比较高,大量并发使用时,系统负荷比较大。

use [test]
go

select 1 as id,'li4' as name into #t;
go

declare @t table(id int,name varchar(50));
insert into @t(id,name) values(2,'wang8');
go

create procedure test_prd
as
begin
	exec('select * from #t;select * from @t;');
end
go

exec test_prd;
go

drop procedure test_prd;
go

drop table #t;
go


转载于:https://www.cnblogs.com/leftfist/p/4257905.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值