【小5聊】Sql Server 使用游标循环记录更新字段值

【开发环境】

开发系统:Windows 10

开发语言:SQL Server

开发工具:SQL Server 2008 R2

文章作用:记录、备忘、总结、分享、理解

相互学习:微信号-xgwkf566

人生格言:勤能补拙

 

【主要知识点】

1、存储过程的创建

2、exc 执行存储过程

3、变量的定义,变量的赋值

4、游标的定义以及使用

5、if/else语句的使用

6、while语句的使用

7、begin end等同花括号{},语句块

 

【场景】

1、假设一张表的字段guid有些有值,有些没有值,需要通过sql语句批量处理guid为null的记录,并且赋值newid

备注:当然也可以在后台程序进行逻辑更新,这里主要是使用sql语句进行更新,相当于一个DBA的简单工作

2、创建存储过程,用于添加100条记录,有些记录的字段guid有值,有些没值,用于更新时,有值的不会受影响


/*
	Key:	samall five
	Value:	更新表新增字段,循环赋值guid=newid()
	Time:	2020.04.14
*/

create procedure sp_add_tableone_data
as
begin
    declare @count int
    declare @i int

	set @count=100;
	set @i=0;

    while @i<@count    --返回被 FETCH语句执行的最后游标的状态--
        begin          
		    if @i%5=0
				begin
					insert into task(guidValue,taskid,taskName)
					values(newid(),@i,'数据')
				end
			else 
				begin
					insert into task(taskid,taskName)
					values(@i,'数据')
				end

			set @i+=1;
        end    
end
go

执行存储过程语句:exec sp_add_tableone_data --添加100条记录

2、创建存储过程,用于更新guid字段为null的记录,有值的记录不会受影响

create procedure sp_update_tableone_guid
as
begin
    declare @a int,@error int    
    declare @temp varchar(50)
    set @a=1
    set @error=0
    --申明游标为id
    declare table_cursor cursor 
    for (select id from task where guidValue is null)
    --打开游标--
    open table_cursor
    --开始循环游标变量--
    fetch next from table_cursor into @temp --将数据插入临时表
    while @@FETCH_STATUS = 0    --返回被 FETCH语句执行的最后游标的状态--
        begin
            update task set guidValue=newid() where id=@temp
            set @a=@a+1
            set @error= @error + @@ERROR   --记录每次运行sql后是否正确,0正确
            fetch next from table_cursor into @temp   --转到下一个游标,没有会死循环
        end    
    close table_cursor  --关闭游标
    deallocate table_cursor   --释放游标
end
go

执行存储过程语句:exec sp_update_tableone_guid --更新guid为null的值

 

select * from task --F845315D-5058-42EE-B5C4-B988867E5E5F
--truncate table task  --删除表记录,id重置

 

 

【撸码写文档,我们是认真的】

【一句话一感想一心情,记录下你影响最深刻的一句,也许还能不停的给你能量哦】

版本更新,增加测颜值推荐图文,来体验下句子的魅力,秀出你棒棒的文笔

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

全栈小5

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

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

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

打赏作者

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

抵扣说明:

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

余额充值