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
原文:http://www.cnblogs.com/long-hun/p/4949485.html