zoukankan      html  css  js  c++  java
  • 使用游标的存储过程

     1 USE [ChinaMDM_0603]
     2 GO
     3 /****** Object:  StoredProcedure [dbo].[Import_11_WorkFlow_4n_Items_CustomerCompCodes]    Script Date: 2016/6/7 13:49:12 ******/
     4 SET ANSI_NULLS ON
     5 GO
     6 SET QUOTED_IDENTIFIER ON
     7 GO
     8 ALTER procedure [dbo].[Import_11_WorkFlow_4n_Items_CustomerCompCodes]
     9 --参数(目前不用参数)
    10 --@parameter nvarchar(100),
    11 --@headerid int 
    12 as
    13 begin 
    14 set xact_abort on 
    15 begin tran 
    16 --变量
    17 --CustomerCompCodes 表
    18 declare @CustomerHeaderid int;
    19 declare @CompanyCodeid nvarchar(50);
    20 declare @ProductClasses nvarchar (100);
    21 declare @IsISO bit;
    22 declare @IsGMP bit;
    23 declare @IsGsp bit;
    24 declare @IsGMPGSPOther bit;
    25 declare @GMPGSPOtherValue nvarchar(500);
    26 declare @count int;
    27 declare @CustomerCompCodeId int;
    28 --声明游标
    29 declare _cur cursor for
    30 --查询必要数据
    31 select 
    32 h.id as Headerid,
    33 cp.id as CompanyCodeid,
    34 temp.[ProductClasses],
    35 temp.IsISO,
    36 temp.[IsGMP],
    37 temp.[IsGSP] ,
    38 temp.[IsGMPGSPOther],
    39 temp.[GMPGSPOtherValue]
    40 from temp_CustomerCompCodes_M temp
    41 join  CustomerHeaders h on temp.CustomerHeaderCode=h.code
    42 left join CompanyCodes cp on temp.CompanyCodes=cp.code
    43 --打开游标
    44 open _cur
    45 --将游标所在行的column值赋给对应参数
    46 fetch next from _cur into @CustomerHeaderid,@CompanyCodeid,@ProductClasses,@IsISO,@IsGMP,@IsGSP,@IsGMPGSPOther,@GMPGSPOtherValue
    47 --判断游标状态@@fetch_status值的改变是通过fetch next from实现的   “FETCH NEXT FROM Cursor” 
    48 --0 FETCH 语句成功 -1 FETCH 语句失败或此行不在结果集中 -2 被提取的行不存在
    49 while(@@FETCH_STATUS=0)
    50 begin 
    51 select @count = COUNT(1) from CustomerCompCodes where CustomerHeaderId=@CustomerHeaderId and CompanyCodeId=@CompanyCodeid
    52     if ( @count > 0)
    53         begin
    54          select @CustomerCompCodeId=id from CustomerCompCodes where CustomerHeaderId=@CustomerHeaderid and CompanyCodeId=@CompanyCodeid
    55         update CustomerCompCodes 
    56         set CustomerHeaderId=@CustomerHeaderid,ProductClasses=@ProductClasses,IsISO=@IsISO,IsGMP=@IsGMP,IsGSP=@IsGsp,IsGMPGSPOther=@IsGMPGSPOther,GMPGSPOtherValue=@GMPGSPOtherValue 
    57         where id=@CustomerCompCodeId
    58         end
    59     else 
    60         begin
    61         --将参数值插入表VendorCompCodes
    62 insert into CustomerCompCodes (CustomerHeaderId,CompanyCodeid,ProductClasses,IsISO,IsGMP,IsGSP,IsGMPGSPOther,GMPGSPOtherValue,IsActive) values (@CustomerHeaderid,@CompanyCodeid,@ProductClasses,@IsISO,@IsGMP,@IsGSP,@IsGMPGSPOther,@GMPGSPOtherValue,1)
    63         end
    64 --循环下一行游标并将游标所在行的column值赋给对应参数
    65 fetch next from _cur into @CustomerHeaderid,@CompanyCodeid,@ProductClasses,@IsISO,@IsGMP,@IsGSP,@IsGMPGSPOther,@GMPGSPOtherValue
    66 end
    67 --关闭游标
    68 close _cur
    69 --释放游标所占资源
    70 deallocate _cur
    71 
    72 --判断循环过程中是否有错,有则撤回
    73 if @@error<>0
    74     begin
    75         rollback tran
    76     end
    77 --无措则提交    
    78 commit tran
    79 set xact_abort off 
    80 end
    勤劳一日,便得一夜安眠;勤劳一生,便得幸福长眠。
  • 相关阅读:
    Spring Boot(二十):使用spring-boot-admin对spring-boot服务进行监控
    spring Boot(十九):使用Spring Boot Actuator监控应用
    Spring Boot(十八):使用Spring Boot集成FastDFS
    Spring Boot(十七):使用Spring Boot上传文件
    Spring Boot(十六):使用Jenkins部署Spring Boot
    Spring Boot(十五):spring boot+jpa+thymeleaf增删改查示例
    Spring Boot(十四):spring boot整合shiro-登录认证和权限管理
    ubuntu18.04使用vscode报pylint is not install错误
    处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“Manag
    在SQL Server中,为何都建议禁止 VIA 协议,VIA协议具体内容是什么?
  • 原文地址:https://www.cnblogs.com/zhaomengmeng/p/5566889.html
Copyright © 2011-2022 走看看