sqlserver临时表或表变量代替游标

本文详细介绍了在数据库查询中如何使用临时表和表变量替代游标进行循环操作的方法,包括变量定义、临时表创建、循环实现以及存储过程的应用。通过实例代码演示了如何在SQL查询中高效地处理记录集,特别关注了在表有标识列的情况下使用表变量的场景。此外,文章还总结了存储过程中循环和临时表的结合使用,为数据库开发者提供了一种灵活处理数据的新思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

在很多场合,用临时表或表变量也可以替代游标

临时表用在表没有标识列(int)的情况下.

在表有标识列(int)的情况下可以用表变量,当然也可以用临时表.利用临时表或表变量的原因时,生成一个连续的列对于临时表是使用SELECT .... ,IDENTITY(int) NewID INTO #tmp SELECT ... FROM YourTable对于YourTable含有标识列(比如字段名为ID)时,可以INSERT @tmpTableSELECT ..., NewID=(SELECT COUNT(*) FROM YourTable b WHERE b.id<=a.id) FROM YourTable a当然,也可以不写入表变量而使用子查询.当有了从 1--你的记录数连续的NewID时, 你就可以用循环来操作每一条记录了.这个NewID你就可以当它是指针标识.DECLARE @i INT,@cnt INTSET @i=1SELECT @cnt=COUNT(*) FROM YourTableWHILE @i<@cnt     BEGIN           SELECT .... FROM #tmp(或@tmpTable依上面情况不同) WHERE NewID=@i           ...           SET @i=@i+1     ENDDROP TABLE...

---------
存储过程的循环和临时表

代码举例:


CREATE PROCEDURE get_zb_count_3 
@J_JID varchar(50), 
@S_Area varchar(6000), 
@K_ID varchar(50), 
@zb_count int output 
AS 
begin 
declare @i int ---存放循环变量 
declare @count int ---存放表的数据记录数 
declare @Kh_ID varchar(50)-----存放考核子指标值 
declare @total int ------存放count的循环累计 
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) 
-------------------------------------------------1---------------------------------- 
begin set @i = 1 -------变量初始化 set @total = 0 ---累计初始化 while (@i <= @count) -------开始循环 
--------------------------------------------2-------------------------- 
begin select @Kh_ID = StyleID from #KhStyle where intID = @i --循环把临时表的子指标值 给于变量 @Kh_ID select @zb_count=count(*) from v_kh_jg where J_ID=@J_JID and K_ID=@Kh_ID and S_Area in (select * from GetTB(@S_Area)) -----当前子指标所属企业数 if @zb_count = 0 select @zb_count = 1 ---如果没有企业则为1 select @total= @zb_count +@total ---累计 select @i = @i +1 --循环递增 end 
-------------------------------------------2--------------------------- set @zb_count=@total end 
---------------------------------------------1--------------------------------- 
else set @zb_count=0 
drop table #KhStyle---删除临时表 end 
GO 


说明:我这里用到了临时表的功能,通过这个存储过程至少能学到三点知识
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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微笑点燃希望

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值