以下代码的应用场景为:
找出所有指定等级且积分不足的用户,充值到指定金额,并给累计积分的字段加上充值的数值;
学会基本用法后,大部分场景都可套入参考使用
USE [数据库名]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[proc_addvoucherforvip]
AS
BEGIN
SET NOCOUNT ON;
-- 利用游标循环更新会员表中的数据
DECLARE @voucher INT;--用于临时存储当前会员的积分
DECLARE @mID INT;--用于临时存储当前会员的id
DECLARE @addVoucher INT --用于临时存储当前会员的积分的增加量
DECLARE @index INT = 1--循环时用于标记已修改会员数量
DECLARE @count INT --用于标记会员总数
select @count = COUNT(id) from dbo.member where (usertype = 1 or usertype = 2) and status = 1 and voucher <3000 --查询所有符合条件的会员
DECLARE My_Cursor CURSOR --定义游标
FOR (SELECT id,voucher FROM dbo.member where (usertype = 1 or usertype = 2) and status = 1 and voucher <3000) --查出需要的集合放到游标中
OPEN My_Cursor; --打开游标
FETCH NEXT FROM My_Cursor INTO @mID,@voucher; --读取第一行数据
--开始循环
WHILE @@FETCH_STATUS = 0
BEGIN
--打印方便观察脚本执行情况
print '正在修改第'+convert(varchar,@index)+'条数据'+convert(varchar,@mID)+',共'+convert(varchar,@count)
print '会员ID为:'+convert(varchar,@mID)
BEGIN
set @addVoucher = 3000-@voucher --充值的金额
exec('update member set voucher =3000,totalAdd += '+@addVoucher+' where id ='+@mID) --给当前用户充值,并给累加字段加上充值的金额
END
FETCH NEXT FROM My_Cursor INTO @mID,@voucher;--读取下一行数据,并把值重新赋值给变量
set @index+=1
END
--循环结束
CLOSE My_Cursor; --关闭游标
DEALLOCATE My_Cursor; --释放游标
END