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

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
简介: 使用游标循环记录更新字段值
作者:小5聊基础
简介:一只喜欢全栈方向的程序员,欢迎咨询,尽绵薄之力答疑解惑
编程原则:Write Less Do More

【开发环境】
开发系统:Windows 10
开发语言:SQL Server
开发工具:SQL Server 2008 R2
文章作用:记录、备忘、总结、分享、理解
人生格言:勤能补拙

【主要知识点】
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条记录
image.png

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的值
image.png

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

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS&nbsp;SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/sqlserver
相关文章
|
3天前
|
SQL 存储 数据库连接
LabVIEW与SQL Server 2919 Express通讯
LabVIEW与SQL Server 2919 Express通讯
|
4天前
|
SQL Windows
安装SQL Server 2005时出现对性能监视器计数器注册表值执行系统配置检查失败的解决办法...
安装SQL Server 2005时出现对性能监视器计数器注册表值执行系统配置检查失败的解决办法...
12 4
|
5天前
|
SQL 数据可视化 Oracle
这篇文章教会你:从 SQL Server 移植到 DM(上)
这篇文章教会你:从 SQL Server 移植到 DM(上)
|
5天前
|
SQL 关系型数据库 数据库
SQL Server语法基础:入门到精通
SQL Server语法基础:入门到精通
SQL Server语法基础:入门到精通
|
5天前
|
SQL 存储 网络协议
SQL Server详细使用教程
SQL Server详细使用教程
26 2
|
5天前
|
SQL 存储 数据库连接
C#SQL Server数据库基本操作(增、删、改、查)
C#SQL Server数据库基本操作(增、删、改、查)
7 0
|
5天前
|
SQL 存储 小程序
数据库数据恢复—Sql Server数据库文件丢失的数据恢复案例
数据库数据恢复环境: 5块硬盘组建一组RAID5阵列,划分LUN供windows系统服务器使用。windows系统服务器内运行了Sql Server数据库,存储空间在操作系统层面划分了三个逻辑分区。 数据库故障: 数据库文件丢失,主要涉及3个数据库,数千张表。数据库文件丢失原因未知,不能确定丢失的数据库文件的存放位置。数据库文件丢失后,服务器仍处于开机状态,所幸未写入大量数据。
数据库数据恢复—Sql Server数据库文件丢失的数据恢复案例
|
6天前
|
SQL 存储 关系型数据库
SQL Server详细使用教程及常见问题解决
SQL Server详细使用教程及常见问题解决
|
7天前
|
SQL 安全 数据库
SQL Server 备份和还原
SQL Server 备份和还原
|
7天前
|
SQL 存储 安全
SQL Server 权限管理
SQL Server 权限管理