排名
1
文章
860
粉丝
112
评论
163
.net core自定义项目模板,创建自己的模板项目,使用命令行创建模板项目
尘叶心繁 : 可以可以讲真的我都想弄个模板
net core webapi post传递参数
庸人 :
确实坑哈,我也是下班好了好几次,发现后台传递对象是可以的,但...
.net webapi 返回需要的字段,忽略某些字段,修改字段名等
雨雨雨雨雨辰 : 已精
.net webapi 返回需要的字段,忽略某些字段,修改字段名等
雨雨雨雨雨辰 :
疯狂反射
百度编辑器自定义模板
庸人 : 我建议换个编辑器,因为现在百度富文本已经停止维护了,用tinymec...
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:
50010702506256


欢迎加群交流技术

什么是游标:
游标类似于一个指针,游标就是把数据结果放到内存中,然后游标指向这个内存地址
作用:
可以让我们一行一行的去处理数据, 类似c# ado.net SqlDataReader 可以提供一行一行的读取数据
可以把游标理解成数据库中的SqlDataReader,这样就可以在数据库中处理一些比较复杂的逻辑
使用游标的步骤:
1:创建游标 declare 游标名字 cursor for ....接语句
2:打开游标 open 游标名字
3:查询游标(可以是遍历) fetch next from 游标名称 into 变量
4:关闭游标 close 游标名字
5:删除游标 deallocate 游标名字
@@fetch_status:查询游标有没有读完,如果是-1就说明游标读完了,
注意:游标打开的初始@@fetch_status也是等于-1,没有读取的时候是-1,读取完了也是-1
游标的分类:
静态游标和动态游标
动态游标:主表数据变了, 游标数据会跟着变
静态游标:主表数据变了, 游标数据不会跟着变
游标的简单使用:
- select * from UserInfo
-
- --1:创建游标
- declare mycursor cursor
- for select username ,number from UserInfo
-
- --2:打开游标
- open mycursor
-
- declare @username varchar(64),@number varchar(64),@beforename varchar(64)
- --3:查询游标
- --fetch next from mycursor into @username,@number
- --print(@username+':'+@number)
-
- --3-1:循环遍历这个游标
- fetch next from mycursor into @username,@number
- --print(@username+':'+@number)
-
- print(@@fetch_status)
-
- while @@fetch_status!=-1
- begin
- --取游标的数据
- update UserInfo set UserName='张辽' where Id = 4
- print(@username+':'+@number)
- fetch next from mycursor into @username,@number
- --查询原表数据
- --select @beforename = username from UserInfo where Id = 4
- --print(@username+':'+@beforename)
- end
-
- --关闭游标
- close mycursor
- --删除游标
- deallocate mycursor
游标实现薪资添加:
游标实现工资的添加,比如有一张原始工资表,还有一张对应需要添加薪水的表,我们可以利用游标能一行一行处理数据的能力轻松的实现
表结构如下:
- --原始工资表
- create Table Account
- (
- Id int primary key identity(1,1),
- MyMoney int,
- AccountNumber nvarchar(64)
- )
-
- insert Account values(1000,'60023')
- insert Account values(1000,'60025')
- insert Account values(1000,'60026')
-
-
- --需要添加工资的表
- create Table AddAccount
- (
- Id int primary key identity(1,1),
- AddMoney int,
- AccountNumber nvarchar(64)
- )
- insert AddAccount values(2000,'60023')
- insert AddAccount values(200,'60025')
- insert AddAccount values(500,'60026')
游标的实现如下:
- create proc proc_addsalary
- as
- begin
- --处理涨工资的游标
- declare add_salary cursor for select AddMoney,AccountNumber from AddAccount
- open add_salary
-
- declare @AddMoney int ,@AccountNumber nvarchar(64)
-
- --循环处理
- fetch next from add_salary into @AddMoney,@AccountNumber
-
- while @@FETCH_STATUS!=-1
- begin
- --更新原表
- update Account set MyMoney = MyMoney+@AddMoney where AccountNumber = @AccountNumber
- --才能一行一行的读取
- fetch next from add_salary into @AddMoney,@AccountNumber
- end
-
- close add_salary
- deallocate add_salary
- end
使用游标分等级涨的薪资:
根据用户绩效表实现添加工资
用户绩效考核(KPI)在60分以下就不涨工资,如果成绩在60-80加1000,如果在80以上加2000
多一张绩效表:
- --绩效表
- create Table KPI
- (
- Id int primary key identity(1,1),
- Score int,
- AccountNumber nvarchar(64) ,
- KPIType int --状态为1表示没有增加过薪资
- )
-
- insert KPI values(58,'60023',1)
- insert KPI values(90,'60025',1)
- insert KPI values(70,'60026',1)
实现代码如下:
- declare dec_KPI cursor for select AccountNumber ,Score,KPIType FROM KPI
- open dec_KPI
-
- --定义变量 存放需要涨得工资 用户名
- declare @KPI int ,@KPI_score int,@KPI_AccountNumber nvarchar(64),@upMoney int =0
- fetch next from dec_KPI into @KPI_AccountNumber, @KPI_score,@KPI
-
- --循环输出
- while @@FETCH_STATUS=0
- begin
-
- print(@KPI)
-
- --判断状态是否为1则加工资
- if(@KPI=1)
- begin
-
- --判断涨工资多少
- if (@KPI_score>=60 and @KPI_score<=80 )
- begin
- set @upMoney=1000
- end
- if (@KPI_score>80)
- begin
- set @upMoney=2000
- end
-
- --更新原表
- update Account set MyMoney = MyMoney+@upMoney where AccountNumber = @KPI_AccountNumber
- update KPI set KPIType = 0 where AccountNumber = @KPI_AccountNumber
- end
- else
- begin
- print('绩效已核算!!!')
- --print(@KPI_AccountNumber+ ':'+@KPI_score +':'+@KPI)
- --一行一行的读取
- end
- fetch next from dec_KPI into @KPI_AccountNumber, @KPI_score,@KPI
- end
- --关闭 删除
- close dec_KPI
- deallocate dec_KPI
欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)
评价
雨雨雨雨辰
1
Session
发现了好东西,收藏了