存储过程加游标的使用+案例

ALTER proc [dbo].[LoadParcelFromInvestment]
as
declare @ParcelName nvarchar(50)--定义地块名
declare @ParcelOriginalID nvarchar(50)--定义地块ID
declare @ParcelGainDate nvarchar(50)--定义地块创建时间
declare @ProjectCode nvarchar(50)--定义地块对应的项目code
DECLARE My_Cursor CURSOR --定义游标
for(SELECT Id,Name,TakeTime FROM [LK_Investment].[ZL_Investment].[dbo].[Viw_TakedLandInfo])  --查出需要的集合放到游标中
OPEN My_Cursor; --打开游标
fetch next from My_Cursor into @ParcelOriginalID,@ParcelName,@ParcelGainDate
--FETCH NEXT FROM My_Cursor ; --读取第一行数据
WHILE @@FETCH_STATUS = 0
    BEGIN
        if exists(select 1 from MDS_Parcel_Investment where ParcelName = @ParcelName and Status='0')--如果status=0表示状态未拿地进行修改
        
        begin
        --修改地块表的状态
        print 1
         --update [dbo].[MDS_Parcel_Investment] set Status=1 where ProjectCode=@ProjectCode
        update MDS_Parcel_Investment set status=1 where ParcelName=@ParcelName
        print 2
        --通过每条数据循环的地块名查询项目code然后给变量赋值
         set @ProjectCode= (select top 1 ProjectCode from MDS_Parcel_Investment where ParcelName = @ParcelName)
        --修改地块数据
        update MDS_Parcel_Investment set ParcelGainDate=@ParcelGainDate, ParcelOriginalID=@ParcelOriginalID where ParcelName=@ParcelName
        print 3
        --根据项目code查询如果有一块地块查到有状态0未拿地修改项目表跟信息表
        if not exists(select*from [dbo].[MDS_Parcel_Investment] where ProjectCode=@ProjectCode and Status='0')
        begin
         --修改项目信息表的状态
         update [dbo].[MDS_Project_Base] set LandStatus=1 where ProjectCode=@ProjectCode
         --修改项目表的状态
         update  [dbo].[MDS_Project] set LandStatus=1 where ProjectCode=@ProjectCode
         print 4
        end
        end
        else--如果不存在未拿地新增
        begin
        insert into [MDS_Parcel_Investment] (ParcelOriginalID,ParcelName,ParcelGainDate,ParcelType,AreaGroup,AreaGroupName,AreaCompany,AreaCompanyName,BuCode,BuName,areaid,area,cityid,city,provinceid,province) 
        SELECT Id,[Name],[TakeTime] ,[LandType],[qyjtCode],[qyjtName],[qygsCode] ,[qygsName],[sybCode],[sybName],t.areaid,t.area,t.cityid,t.city,t.provinceid,t.province FROM [LK_Investment].[ZL_Investment].[dbo].[Viw_TakedLandInfo] t 
        left join MDS_Parcel_Investment p 
        on cast(t.Id as nvarchar(200))=p.ParcelOriginalID  where p.ParcelOriginalID is null and Name=@ParcelName
        end
        begin
        update  [MDS_Parcel_Investment] set Status=1 where ParcelName=@ParcelName
        end
        --UPDATE dbo.MemberAccount SET UserName = UserName + 'A' WHERE CURRENT OF My_Cursor; --更新
        --DELETE FROM dbo.MemberAccount WHERE CURRENT OF My_Cursor; --删除
        --FETCH NEXT FROM My_Cursor; --读取下一行数据
        fetch next from My_Cursor into @ParcelOriginalID,@ParcelName,@ParcelGainDate
    END
CLOSE My_Cursor; --关闭游标
DEALLOCATE My_Cursor; --释放游标


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值