设为首页收藏本站

EPS数据狗论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1640|回复: 0

SQL Server for循环用法

[复制链接]

32

主题

313

金钱

473

积分

入门用户

发表于 2019-7-10 14:03:26 | 显示全部楼层 |阅读模式

先贴示例,最后是语法:
准备工作,模拟2012-2018年订单数据:

先从tb_Detail订单详细表中找出属于2012年的数据(备注有,故意模拟的),查出OrderID:

select OrderID from tb_Detail where Remark = "2012年数据用";
1.png
再通过OrderID修改tb_OrderInfo商品订单表中的各个年度:

update tb_OrderInfo set OrderDate="2012-05-31 11:27:37.123" where OrderID in (select OrderID from tb_Detail where Remark = "2012年数据用");
2.png

查看了下整个2012年数据没问题(select OrderID from tb_OrderInfo where YEAR(OrderDate) =2012;)可以考虑使用for循环了:
3.png

declare @min int

declare @max int

set @min=2013

set @max=2019

while @min<@max

begin

update tb_OrderInfo set OrderDate=cast(@min as varchar(10))+"-05-31 11:27:37.123" where OrderID in (select OrderID from tb_Detail where Remark = cast(@min as varchar(10))+"年数据用")

set @min=@min+1

end

注意for循环中的cast(@min as varchar(10))字段,这是因为我们声明的@min变量是int类型的,而后面的“年数据用”和我们要查询的Remark字段都是vachar类型的,所以需要把int类型转为varchar,不然会出现如下错误:
4.png

另外,如果用命令行输入的话,注意复制粘贴SQL语句时候的换行符问题。

如图执行for循环:
5.png

最后测试数据,通过
6.png


for循环语法介绍:

  --                                  ╔════════╗  

  -- ===============================  ║ if语句使用示例 ║  

  --                                  ╚════════╝   

            declare @a int  

            set @a=12  

            if @a>100  

               begin  

                   print @a  

               end  

            else  

               begin  

                   print 'no'  

               end  

  --                                  ╔══════════╗  

  -- ===============================  ║ while语句使用示例  ║  

  --                                  ╚══════════╝

declare @i int

set @i=1

while @i<30

   begin

   insert into test (userid) values(@i)

   set @i=@i+1

end

-- 设置重复执行 SQL 语句或语句块的条件。只要指定的条件为真,就重复执行语句。可以使用 BREAK 和 CONTINUE 关键字在循环内部控制 WHILE 循环中语句的执行。 本条为以前从网上查找获取!

  --                                   ╔════════╗  

  -- ================================  ║  临时表和try   ║  

  --                                   ╚════════╝   

      -- 增加临时表  

       select * into #csj_temp from csj  

       -- 删除临时表 用到try  

        begin try    -- 检测代码开始  

             drop table #csj_temp  

        end try  

        begin catch  -- 错误开始  

        end catch

--                                  ╔═════════╗  

-- ===============================  ║ 游标循环读记录   ║  

--                                  ╚═════════╝   

            declare @temp_temp int  

            --declare @Cur_Name  

            --@Cur_Name="aaa"  

            --------------------------------- 创建游标  --Local(本地游标)  

            DECLARE aaa CURSOR for select House_Id from House_House where Deleted=0 or deleted is null  

            ----------------------------------- 打开游标  

              Open aaa  

            ----------------------------------- 遍历和获取游标  

            fetch next from aaa into @temp_temp  

            --print @temp_temp  

            while @@fetch_status=0  

            begin  

              --做你要做的事   

              select * from House_monthEnd where House_Id=@temp_temp  

              fetch next from aaa into @temp_temp  -- 取值赋给变量  

             --   

            end  

            ----------------------------------- 关闭游标  

              Close aaa  

            ----------------------------------- 删除游标  

              Deallocate aaa  

            --      
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

客服中心
关闭
在线时间:
周一~周五
8:30-17:30
QQ群:
653541906
联系电话:
010-85786021-8017
在线咨询
客服中心

意见反馈|网站地图|手机版|小黑屋|EPS数据狗论坛 ( 京ICP备09019565号-3 )   

Powered by BFIT! X3.4

© 2008-2028 BFIT Inc.

快速回复 返回顶部 返回列表