sql for 循环语法案例
For循环案例
- 1. 创建a表,数据如下:
create table a(
id int,
name varchar(30)
Id |
Name |
1 |
关羽 |
500 |
张飞 |
1000 |
赵云 |
100 |
马超 |
200 |
黄忠 |
2.创建b表,现要求将a表数据循环插入到b表,每次循环插入一条数据,显示结果如下:
Id |
Name |
1 |
关羽 |
500 |
张飞 |
1000 |
赵云 |
100 |
马超 |
200 |
黄忠 |
3.因为表中的id不连续,所以我们先要为id进行编号,创建临时表 #c,把a表数据插入到#c,
select identity(int,0,1) as L,id,name into #c from a
Select * from #c--查询临时表#c
Drop table #c –删除临时表#c
这是我们id就有相应的编号,如图:
L |
Id |
Name |
1 |
1 |
关羽 |
2 |
500 |
张飞 |
3 |
1000 |
赵云 |
4 |
100 |
马超 |
5 |
200 |
黄忠 |
4.我们最后把#c表的数据依次循环一条插入到b表
declare @a int
set @a=0
select identity(int,0,1) as L,id,name into #c from a
--select * from #c
while @a<10
begin
--select * from b
insert into b(id,name ) select id,name from #c where L=@a
set @a=@a+1
end
select * from b
5.这时我们就把表a的数据依次循环插入到b表了,如图:
第一次循环插入:
L |
Id |
Name |
1 |
1 |
关羽 |
第二次循环
2 |
500 |
张飞 |
第三次循环
3 |
1000 |
赵云 |
第四次循环
4 |
100 |
马超 |
第五次循环
5 |
200 |
黄忠 |
第六次循环
无数据插入
第七次循环
无数据插入
第八次循环
无数据插入
第九次循环
无数据插入
第十次循环
无数据插入
6.完成的存储过程代码:
create procedure sp_xh
as
begin
truncate table b —-清空b表的记录
declare @a int --声明变量
set @a=0
select identity(INT,0,1) AS L,id,name into #c from a
--SELECT * FROM #c
while @a<10 --循环总次数小于10
begin
--select * from b --查新b表数据
insert into b(id,name ) select id,name from #c where L=@a
set @a=@a+1
end
end
--exec sp_xh