成长路上除了 发表于 2019-7-10 14:03:26

SQL Server for循环用法


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

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

select OrderID from tb_Detail where Remark = "2012年数据用";

再通过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年数据用");


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


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,不然会出现如下错误:


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

如图执行for循环:


最后测试数据,通过



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]
查看完整版本: SQL Server for循环用法