前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >记一个数据库游标的实例

记一个数据库游标的实例

作者头像
追逐时光者
发布2022-02-15 15:14:31
3140
发布2022-02-15 15:14:31
举报
文章被收录于专栏:编程进阶实战编程进阶实战
代码语言:javascript
复制
--数据游标在数据库中起到的就是一个书签的作用,它让一个抽象的成员实例化为一个准确的对象。游标虽好,但是可不能多次使用,运行效率会降低!  

USE [数据库名]
GO

Create procedure [dbo].[proc_gitcontent]//存储过程名称
as

declare --声明变量(用于插入数据)
@content varchar(max),
@sendsuccesscount int,
@sendfailecount int,
@submitfailcount int,
@unknown int,
@status int,
@userid int,
@addtime datetime

--定义一个游标cursor(相当于一个书签)
declare content_cursor cursor for select Content,userid from tbl_sms_log group by Content,userid
declare @sum int
set @sum=0
create table #table
(
[ID] int identity(1,1) primary key NOT NULL,
[Userid] int null,--用户id
[content] [varchar](max) null,--内容
[sendsuccess] [int] null,--发送成功 10
[sendfail] [int] null,--发送失败 20
[submitfail] [int] null,--提交失败 2
[unknown] [int] null,--未知数 0
[addtime] [datetime] null--添加时间
)
--打开游标
open content_cursor


  --读取游标(遍历赋值)(解决重复插入的bug)
   fetch next from content_cursor into @content,@userid
 while @@FETCH_STATUS=0   --返回游标执行状态(0表示返回结果成功)
  begin
   --发送成功赋值
   set @sendsuccesscount=(select COUNT([status]) from tbl_sms_log where status='10' and Content=@content and UserID=@userid group by Content,userid,[status])
   --发送失败赋值
   set @sendfailecount=(select COUNT([status]) from tbl_sms_log where status='20' and Content=@content and UserID=@userid group by Content,userid,[status])
   --提交失败赋值
   set @submitfailcount=(select COUNT([status]) from tbl_sms_log where status='2' and Content=@content and UserID=@userid group by Content,userid,[status])
   --未知赋值
   set @unknown=(select COUNT([status]) from tbl_sms_log where status='0' and Content=@content and UserID=@userid group by Content,userid,[status])

 set @addtime =GETDATE()
   
   --set @sum+=1
   insert into #table(Userid,content,sendsuccess,sendfail,submitfail,unknown,addtime) values (@userid,@content,@sendsuccesscount,@sendfailecount,@submitfailcount,@unknown,@addtime)

fetch next from content_cursor into @content,@userid--游标再次赋值,解决数据重复插入的bug
   end
--关闭游标(decalre content_cursor cursor for)
close content_cursor

--释放资源
deallocate content_cursor
begin

select * from #table

--关闭游标

end
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-03-27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档