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]