游标

本文介绍了一段SQL查询代码,通过定义变量和使用游标遍历数据集,实现根据特定条件筛选OfficeCardException表中的数据,并将其插入到临时表中。此过程展示了SQL查询优化技巧及临时表的应用。


ALTER    procedure P_Test(@startdate nvarchar(50),@enddate nvarchar(50),@companyid int,@depid nvarchar(50))
as

declare @id int --定义变量来保存ID号

declare @code_cursor nvarchar(50) --定义变量来保存ID号

begin tran
 declare mycursor cursor for
select
A.code
from  dbo.T_OfficeCardException A left outer join T_EMPLOYEEBASEINFO D on D.id=A.creater
where A.code>=@startdate and  A.code<=@enddate  and  A.companyid=@companyid
 and A.departmentid in (select short_str FROm [dbo].[split](@depid, ',')

 )--为所获得的数据集指定游标
 open mycursor                   --打开游标
  
  --region 创建临时表  
  if  object_id('tempdb..#tems') is not null
   begin
     drop table tempdb..#tems
    -- truncate table #tems  --清空临时表的所有数据和约束
   end
  else
   begin
      create table #tems
    (id int,
    companyid int,
    code nvarchar(50)
    )
   end  
 fetch next from mycursor into @code_cursor--开始抓第一条数据
   
 
  while(@@fetch_status=0)     --如果数据集里一直有数据
   begin             
    insert into #tems(id,code)    
    select
     TOP 1
     A.id,
       @code_cursor    from T_Back_EMPLOYEEBASEINFO A 

    
    if(@@error<>0)
     begin
     rollback tran
     end
    else
     begin
       fetch next from mycursor into @code_cursor--开始抓第一条数据

     end   
   end    
 select * from #tems  
 close mycursor        --关闭游标
 deallocate mycursor --删除游标
commit tran

转载于:https://www.cnblogs.com/kuang/archive/2012/07/19/2599362.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值