作者:小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条记录
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重置