(SQL游标) 整合省市

本文详细介绍了如何利用SQL游标在数据库中遍历数据,并通过循环将获取的数据插入到另一张表中。这种方法适用于数据量较大、需要分批处理的场景,有效提高数据库操作的效率。

declare @ParentID int
declare @num int
set @num =0
--声明一个游标mycursor,select语句中参数的个数必须要和从游标取出的变量名相同
declare mycursor cursor for
select ProID as ParentID from Bms_Province p

--打开游标
open mycursor

--从游标里取出数据赋值到我们刚才声明的2个变量中
fetch next from mycursor into @ParentID

--判断游标的状态
--0 fetch语句成功
---1 fetch语句失败或此行不在结果集中
---2被提取的行不存在
while (@@fetch_status=0)
begin

--显示出我们每次用游标取出的值
print '游标成功取出一条数据'

set @num =@num+1
print @num
insert into Bms_Areas
select
(case when T.CityID=0 then 0 else -99 end ) as ParentID,
(case when T.CityID=0 then '0'+CONVERT(VARCHAR(10),T.ProID)
else '00'+CONVERT(VARCHAR(10),T.CityID) end) as AreaCode,
T.ProName as AreaName,'' as Notes,
(case when T.CityID=0 then 1 else 2 end) as LevelNum,
0 as IsDefault,1 as IsValid,0 as IsDel
from (
select p.ProID,p.ProName,p.ProSort,0 as CityID,p.ProRemark from Bms_Province p where ProID=@ParentID
union select c.ProID,c.CityName,c.CitySort,c.CityID,'' as ProRemark from Bms_City c where ProID=@ParentID
) T order by CityID

UPDATE T SET ParentID =
(select top 1 AreaID from Bms_Areas where ParentID=0 order by AreaID desc)
from (select * from Bms_Areas where ParentID=-99 and AreaID>
(select top 1 AreaID from Bms_Areas where ParentID=0 order by AreaID desc)) T


--用游标去取下一条记录
fetch next from mycursor into @ParentID
end
--关闭游标
close mycursor
--撤销游标
deallocate mycursor

转载于:https://www.cnblogs.com/FH-cnblogs/p/3223125.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值