SQL server中遍历所有行的循环表达式怎么写
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL server中遍历所有行的循环表达式怎么写相关的知识,希望对你有一定的参考价值。
数据库中有两个表,(不能上传图片郁闷),表一有两个字段:编号(varchar 50)、总数(int),表二有两个字段:编号(varchar 50)、数量(int),表一中的编号的每一条记录依次是这样的:001、001001、001001001、001001001001、001001001002、001001001003、……、001002001001、……、002、002002、……,表一中总数待求;表二中编号的每一条记录依次是这样的规律:001、001001、001001001、001001001001、001001001001001、001001001001002、……002、002001、……,也就是说三个数字算一层,表二中的有5层,比表一中多一层,001001是001的下级单位,001001001是001001的下级,同时也是001的下级,即只要前面几位数字相同,那么数字多的就是数字少的下级,现在要求表一中的总数,比如001对应的总数就是表二中所有001开头的对应的“数量”相加的和,这个循环表达式用SQL语句怎么写啊,能不能具体点,先谢谢各位大哥了,急等啊!
因为记录行有很多,表一中“编号”:001,对应总数是:select sum(数量) from 表二 where 编号 like '001%'
这样是不是就要一条一条的去算啊,还得算001001、001001001、……、002、……,能不能循环一下,然后自动update进去的啊?
UPDATE 表1 SET 表1.总数=SUM(表2.数量) FROM 表1, 表2 WHERE CHARINDEX(表2.编号, 表1.编号)=1
表二中所有001开头的对应的“数量”相加的和
select sum(数量) from 表二 group by left(编号,3) 参考技术A 像这种情况直接group by left(编号,3)就可以了 参考技术B 用游标吧
SQL SERVER循环遍历(普通循环和游标循环)
1、首先需要一个测试表数据Student
2、普通循环
1)循环5次来修改学生表信息
--循环遍历修改记录--
declare @i int
set @i=0
while @i<5
begin
update Student set demo = @i+5 where [email protected]
set @[email protected] +1
end
--查看结果--
select * from Student
2)执行后的查询结果
3、游标循环(没有事务)
1)根据学生表实际数据循环修改信息
---游标循环遍历--
begin
declare @a int,@error int
declare @temp varchar(50)
set @a=1
set @error=0
--申明游标为Uid
declare order_cursor cursor
for (select [Uid] from Student)
--打开游标--
open order_cursor
--开始循环游标变量--
fetch next from order_cursor into @temp
while @@FETCH_STATUS = 0 --返回被 FETCH语句执行的最后游标的状态--
begin
update Student set [email protected],[email protected] where [email protected]
set @[email protected]+1
set @error= @error + @@ERROR --记录每次运行sql后是否正确,0正确
fetch next from order_cursor into @temp --转到下一个游标,没有会死循环
end
close order_cursor --关闭游标
deallocate order_cursor --释放游标
end
go
--查看结果--
select * from Student
2)执行后的查询结果
4、游标循环(事务)
1)根据实际循环学生表信息
---游标循环遍历--
begin
declare @a int,@error int
declare @temp varchar(50)
set @a=1
set @error=0
begin tran --申明事务
--申明游标为Uid
declare order_cursor cursor
for (select [Uid] from Student)
--打开游标--
open order_cursor
--开始循环游标变量--
fetch next from order_cursor into @temp
while @@FETCH_STATUS = 0 --返回被 FETCH语句执行的最后游标的状态--
begin
update Student set [email protected],[email protected] where [email protected]
set @[email protected]+1
set @error= @error + @@ERROR --记录每次运行sql后是否正确,0正确
fetch next from order_cursor into @temp --转到下一个游标
end
if @error=0
begin
commit tran --提交事务
end
else
begin
rollback tran --回滚事务
end
close order_cursor --关闭游标
deallocate order_cursor --释放游标
end
go
--查看结果--
select * from Student
2)执行后的查询结果:
以上是关于SQL server中遍历所有行的循环表达式怎么写的主要内容,如果未能解决你的问题,请参考以下文章