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中遍历所有行的循环表达式怎么写的主要内容,如果未能解决你的问题,请参考以下文章

sql server中do while循环怎么写

pl/sql 循环遍历表并将行的每个条目传递给存储过程

在sql server中循环语句 for要怎么使用

T--SQL语句的for循环怎么写的?

遍历SQL SERVER中所有存储过程和触发器

如何从 SQL Server 中的表中获取行的索引?