sqlserver临时表或表变量代替游标
在很多场合,用临时表或表变量也可以替代游标
临时表用在表没有标识列(int)的情况下.
在表有标识列(int)的情况下可以用表变量,当然也可以用临时表.
利用临时表或表变量的原因时,生成一个连续的列
对于临时表是使用
SELECT .... ,IDENTITY(int) NewID INTO #tmp SELECT ... FROM YourTable
对于YourTable含有标识列(比如字段名为ID)时,可以
INSERT @tmpTable
SELECT ..., NewID=(SELECT COUNT(*) FROM YourTable b WHERE b.id<=a.id) FROM YourTable a
当然,也可以不写入表变量而使用子查询.
当有了从 1--你的记录数连续的NewID时, 你就可以用循环来操作每一条记录了.
这个NewID你就可以当它是指针标识.
DECLARE @i INT,@cnt INT
SET @i=1
SELECT @cnt=COUNT(*) FROM YourTable
WHILE @i<@cnt
BEGIN
SELECT
.... FROM #tmp(或@tmpTable依上面情况不同) WHERE NewID=@i
...
SET
@i=@i+1
END
DROP TABLE...
代码举例:
|
CREATE PROCEDURE get_zb_count_3 @J_JID varchar(50), AS declare @Kh_ID varchar(50)-----存放考核子指标值 create table #KhStyle(IntID int identity(1,1), StyleID varchar(50)) ---创建临时表 insert into #KhStyle(StyleID) select K_ID from T_Kaoh where J_JID=@J_JID and K_FID=@K_ID --------把查询的子指标记录插入到临时表 select @count = count(1) from #KhStyle ---查询当前临时表的子指标记录 if (@count>0) set @total = 0 ---累计初始化 while (@i <= @count) -------开始循环 select @zb_count=count(*) from v_kh_jg where J_ID=@J_JID and K_ID=@Kh_ID and S_Area in (select * if @zb_count = 0 select @total= @zb_count +@total ---累计 select @i = @i +1 --循环递增 set @zb_count=@total set @zb_count=0 drop table #KhStyle---删除临时表 |
说明:我这里用到了临时表的功能,通过这个存储过程至少能学到三点知识
1、变量是如何定义的
以下为程序代码:
|
declare @intID int declare @varname varchar(100) |
2、临时表的使用
以下为程序代码:
|
Create Table #StyleTab(intID int identity(1,1),StyleID varchar(50))----创建临时表 请注意格式:#表名(字段名称 类型,字段名称 类型) 比较有用的一个字段就是自动增长的标识性字段的定义 intID int identity(1,1) Drop Table #StyleTab----删除临时表 |
3、循环的用法
以下为程序代码:
一般i通常作为变量
while(i<=5)
begin
-----代码
end
sqlserver临时表或表变量代替游标的更多相关文章
- sqlserver 临时表、表变量、CTE的比较
原文地址: sqlserver 临时表.表变量.CTE的比较 1.临时表 1.1 临时表包括:以#开头的局部临时表,以##开头的全局临时表. 1.2 存储 不管是局部临时表,还是全局临时表,都会放存 ...
- SqlServer 临时表、表变量、函数 替代游标
http://www.cnblogs.com/chongzi/archive/2011/01/19/1939106.html 临时表 存放在tempdb中 --存储过程中将多表连接结果写入到临时表中, ...
- SqlServer 临时表 与 表变量(转)
1. 表变量 变量都以@或@@为前缀,表变量是变量的一种,另外一种变量被称为标量(可以理解为标准变量,就是标准数据类型的变量,例如整型int或者日期型DateTime).以@前缀的表变量是本地的,因此 ...
- 转:sqlserver 临时表、表变量、CTE的比较
1.临时表 1.1 临时表包括:以#开头的局部临时表,以##开头的全局临时表. 1.2 存储 不管是局部临时表,还是全局临时表,都会放存在tempdb数据库中. 1.3 作用域 局部临时表:对当前连接 ...
- SQL 临时表或表变量替代游标
1.如果表没有自动增长的标识列(int) 使用临时表 SELECT IDENTITY(int) NewID ,.. INTO #tmp FROM YouTable 2.表有标识列 使用表变量 INSE ...
- SQL 临时表或表变量替代游标(转)
1.如果表没有自动增长的标识列(int) 使用临时表 SELECT IDENTITY(int) NewID ,.. INTO #tmp FROM YouTable 2.表有标识列 使用表变量 INSE ...
- SQLServer中临时表与表变量的区别分析(转)
在实际使用的时候,我们如何灵活的在存储过程中运用它们,虽然它们实现的功能基本上是一样的,可如何在一个存储过程中有时候去使用临时表而不使用表变量,有时候去使用表变量而不使用临时表呢? 临时表 临时表与永 ...
- SQLServer中临时表与表变量的区别分析
临时表 临时表与永久表相似,只是它的创建是在Tempdb中,它只有在一个数据库连接结束后或者由SQL命令DROP掉,才会消失,否则就会一直存在.临时表在创建的时候都会产生SQL Server的系统日志 ...
- SQLServer中临时表与表变量的区别分析【转】
在实际使用的时候,我们如何灵活的在存储过程中运用它们,虽然它们实现的功能基本上是一样的,可如何在一个存储过程中有时候去使用临时表而不使用表变量,有时候去使用表变量而不使用临时表呢? 临时表 临时表与永 ...
随机推荐
- 转载的,讲解java.util的集合类
本文是转载的 http://www.ibm.com/developerworks/cn/java/j-lo-set-operation/index.html#ibm-pcon 在实际的项目开发中会有很 ...
- NoSQL之Redis数据库初探
一.NoSQL的风生水起 1.1 后Web2.0时代的发展要求 随着互联网Web2.0网站的兴起,传统的关系数据库在应付Web2.0网站,特别是超大规模和高并发的SNS类型的Web2.0纯动态网站已经 ...
- 51nod 1012 最小公倍数LCM
输入2个正整数A,B,求A与B的最小公倍数. 收起 输入 2个数A,B,中间用空格隔开.(1<= A,B <= 10^9) 输出 输出A与B的最小公倍数. 输入样例 30 105 输出 ...
- fft蝶形算法的特点
- 转:django中session的实现机制
转:www.jianshu.com 要理解session,首先要搞清楚cookie的概念.由于http是无状态的,服务器不能记住用户的信息状态,因此若由同一个客户端发起的多条请求,服务器不能辨别这些请 ...
- 也谈TDD,以及三层架构、设计模式、ORM……没有免费的午餐,选择了,必付出代价
想在园子里写点东西已经很久了,但一直没有落笔,忙着做 一起帮 的开发直播,还有些软文做推广,还要做奶爸带孩子,还要……好吧,我承认,真正的原因是: 太特么的难写了! 但再难写也要写啊,要等到“能写好了 ...
- Spring:基于注解的Spring MVC
什么是Spring MVC Spring MVC框架是一个MVC框架,通过实现Model-View-Controller模式来很好地将数据.业务与展现进行分离.从这样一个角度来说,Spring MVC ...
- acm中文版
http://acm.nyist.net/JudgeOnline/problem.php?pid=1
- 【转】性能测试工具JMeter的使用技巧
在这此对新版本jmeter的学习+温习的过程,发现了一些以前不知道的功能,所以,整理出来与大分享.本文内容如下. 1.如何使用英文界面的jmeter 2.如何使用镜像服务器 3.Jmeter分布式测试 ...
- AngularJS:template2
ylbtech-AngularJS: 1.返回顶部 1. 2. 2.返回顶部 3.返回顶部 4.返回顶部 5.返回顶部 1. 2. 6.返回顶部 作者:ylbtech出处:h ...