一个带游标的存储过程例子

--创建存储过程 CopyBaseDict_T  
IF EXISTS(SELECT * FROM sys.objects WHERE type='p' AND name='CopyBaseDict_T')    
DROP PROC CopyBaseDict_T  
GO 
CREATE PROC [dbo].[CopyBaseDict_T]
@CLASSID int,
@CLASSNAME varchar(50),
@CLASSCODE varchar(50)
AS     
DECLARE @EXISTSCLASSNAME varchar(50);
--如果欲增加的检查类型名称已经存在则退出存储过程
    select @EXISTSCLASSNAME = CLASSNAME from DICT_CLASS where CLASSNAME = @CLASSNAME;
if (@EXISTSCLASSNAME = @CLASSNAME) return;


print '1';

DECLARE @MAXClassID int,@MAXOrganID int,@MAXOrganModeID int,@MAXDISEASEID int,@MAXDIAGTEMPLATEID int;
select @MAXClassID = max(CLASSID)+1 from DICT_CLASS;
select @MAXOrganID = max(ORGANID)+1 from DICT_ORGAN;
select @MAXOrganModeID = max(ORGANMODEID)+1 from DICT_ORGANMODE;
select @MAXDISEASEID = max(DISEASEID)+1 from DICT_DISEASE;
select @MAXDIAGTEMPLATEID = max(DIAGTEMPLATEID)+1 from DICT_DIAGTEMPLATE;


----这里插入DICT_CLASS表数据
insert into DICT_CLASS(CLASSID,CLASSNAME,MAXNO,CODE,APPLY,UNIFORMNO,PREFIXNO,DEPARTMENTNO,DEPARTTYPECODE)
     select @MAXClassID,@CLASSNAME,MAXNO,@CLASSCODE,APPLY,UNIFORMNO,PREFIXNO,DEPARTMENTNO,DEPARTTYPECODE 
   from DICT_CLASS 
  where CLASSID = @CLASSID;
print '插入DICT_CLASS表数据';
DECLARE @OrganID int,@NAME varchar(50),@CODE varchar(25),@FREQUENCY int     
--声明一个cursor_DICT_ORGAN游标     
DECLARE cursor_DICT_ORGAN CURSOR FOR
SELECT Organid,NAME,CODE,FREQUENCY
FROM DICT_ORGAN where CLASSID = @CLASSID
--打开游标
OPEN cursor_DICT_ORGAN     
--提取游标第一行     
FETCH NEXT FROM cursor_DICT_ORGAN INTO @OrganID,@NAME,@CODE,@FREQUENCY
--循环提取游标内容     
WHILE @@FETCH_STATUS=0     
BEGIN


----这里插入DICT_ORGAN表数据
insert into DICT_ORGAN(ORGANID,CLASSID,NAME,CODE,FREQUENCY)
    values(@MAXOrganID,@MAXClassID,@NAME,@CODE,@FREQUENCY);

print '插入DICT_ORGAN表数据';
--------------DICT_ORGANMODE 嵌套---------------------begin
DECLARE @ORGANMODEID int,@DIRECTION varchar(80),@DIRECTIONCODE varchar(100),@ROOMNO varchar(20),
       @FREQUENCY2 int,@EXPOSALTIMES float,@DEFAULTWIDTH varchar(20),@DEFAULTLEVEL varchar(20),
@WORKLISTCODE varchar(20),@ASSESCORE float
--声明一个cursor_DICT_ORGANMODE游标     
DECLARE cursor_DICT_ORGANMODE CURSOR FOR
SELECT DIRECTION,DIRECTIONCODE,ROOMNO,FREQUENCY,EXPOSALTIMES,DEFAULTWIDTH,DEFAULTLEVEL,WORKLISTCODE,ASSESCORE
FROM DICT_ORGANMODE where ORGANID = @OrganID
--打开游标
OPEN cursor_DICT_ORGANMODE     
--提取游标第一行     
FETCH NEXT FROM cursor_DICT_ORGANMODE INTO @DIRECTION,@DIRECTIONCODE,@ROOMNO,@FREQUENCY2,@EXPOSALTIMES,@DEFAULTWIDTH,@DEFAULTLEVEL,@WORKLISTCODE,@ASSESCORE     
--循环提取游标内容     
WHILE @@FETCH_STATUS=0     
BEGIN


----这里插入DICT_ORGANMODE表数据
insert into DICT_ORGANMODE(ORGANMODEID,ORGANID,DIRECTION,DIRECTIONCODE,ROOMNO,FREQUENCY,EXPOSALTIMES,DEFAULTWIDTH,DEFAULTLEVEL,WORKLISTCODE,ASSESCORE)
        values(@MAXOrganModeID,@MAXOrganID, @DIRECTION,@DIRECTIONCODE,@ROOMNO,@FREQUENCY2,@EXPOSALTIMES,@DEFAULTWIDTH,@DEFAULTLEVEL,@WORKLISTCODE,@ASSESCORE);
print '插入DICT_ORGANMODE表数据';
set @MAXOrganModeID = @MAXOrganModeID+1;
FETCH NEXT FROM cursor_DICT_ORGANMODE 
INTO @DIRECTION,@DIRECTIONCODE,@ROOMNO,@FREQUENCY2,@EXPOSALTIMES,@DEFAULTWIDTH,@DEFAULTLEVEL,@WORKLISTCODE,@ASSESCORE   
END     
--关闭游标     
CLOSE cursor_DICT_ORGANMODE     
--释放游标资源     
DEALLOCATE cursor_DICT_ORGANMODE 
--------------DICT_ORGANMODE 嵌套---------------------end


--------------DICT_DISEASE 嵌套---------------------begin
DECLARE @DISEASEID int, @DISEASENAME varchar(100),@DISEASECODE varchar(100),@FREQUENCY3 varchar(6),@ISMASCULINE varchar(2),@DISEASEORDER int
--声明一个cursor_DICT_DISEASE 游标     
DECLARE cursor_DICT_DISEASE CURSOR FOR
SELECT DISEASEID, NAME,CODE,FREQUENCY,ISMASCULINE,DISEASEORDER
FROM DICT_DISEASE where ORGANID = @OrganID
--打开游标
OPEN cursor_DICT_DISEASE     
--提取游标第一行     
FETCH NEXT FROM cursor_DICT_DISEASE INTO @DISEASEID, @DISEASENAME ,@DISEASECODE,@FREQUENCY3,@ISMASCULINE,@DISEASEORDER     
--循环提取游标内容     
WHILE @@FETCH_STATUS=0     
BEGIN
   ----这里插入DICT_DISEASE表数据  
insert into DICT_DISEASE(DISEASEID,ORGANID,ORGANMODEID,NAME,CODE,FREQUENCY,ISMASCULINE,DISEASEORDER)
     values(@MAXDISEASEID,@MAXOrganID,null,@DISEASENAME ,@DISEASECODE,@FREQUENCY3,@ISMASCULINE,@DISEASEORDER);
print '插入DICT_DISEASE表数据';
--------------DICT_DIAGTEMPLATE 嵌套---------------------begin
DECLARE @FREQUENCY4 numeric(10,0),@DIAGTEMPLATENAME varchar(50),@TITLEONE varchar(20),
       @CONTENTONE varchar(max),@TITLETWO varchar(20),@CONTENTTWO varchar(max),@TITLETHREE varchar(20),
@CONTENTTHREE varchar(max),@TITLEFOUR varchar(20),@CONTENTFOUR varchar(max),@TITLEFIVE varchar(20),
@CONTENTFIVE varchar(max),@TITLESIX varchar(20),@CONTENTSIX varchar(max),@TITLESEVEN varchar(20),
@CONTENTSEVEN varchar(max),@TITLEALL varchar(20),@LAYOUTOFBODY varchar(20),
@DISIMGTIMES varchar(20),@SCANFORMULA varchar(20),@TURNTOBIGS varchar(20)
--声明一个cursor_DICT_DIAGTEMPLATE 游标     
DECLARE cursor_DICT_DIAGTEMPLATE CURSOR FOR
SELECT FREQUENCY,DIAGTEMPLATENAME,TITLEONE,CONTENTONE,TITLETWO,CONTENTTWO,TITLETHREE,CONTENTTHREE,TITLEFOUR,CONTENTFOUR,TITLEFIVE,CONTENTFIVE,TITLESIX,CONTENTSIX,TITLESEVEN,CONTENTSEVEN,TITLEALL,LAYOUTOFBODY,DISIMGTIMES,SCANFORMULA,TURNTOBIGS
FROM DICT_DIAGTEMPLATE where DISEASEID = @DISEASEID
--打开游标
OPEN cursor_DICT_DIAGTEMPLATE     
--提取游标第一行     
FETCH NEXT FROM cursor_DICT_DIAGTEMPLATE INTO @FREQUENCY4,@DIAGTEMPLATENAME,@TITLEONE,@CONTENTONE,@TITLETWO,@CONTENTTWO,@TITLETHREE,@CONTENTTHREE,@TITLEFOUR,@CONTENTFOUR,@TITLEFIVE,@CONTENTFIVE,@TITLESIX,@CONTENTSIX,@TITLESEVEN,@CONTENTSEVEN,@TITLEALL,@LAYOUTOFBODY,@DISIMGTIMES,@SCANFORMULA,@TURNTOBIGS     
--循环提取游标内容     
WHILE @@FETCH_STATUS=0     
BEGIN


----这里插入DICT_DIAGTEMPLATE表数据 
insert into  DICT_DIAGTEMPLATE(DIAGTEMPLATEID,DISEASEID, FREQUENCY,DIAGTEMPLATENAME,TITLEONE,
                               CONTENTONE,TITLETWO,CONTENTTWO,TITLETHREE,
CONTENTTHREE,TITLEFOUR,CONTENTFOUR,
TITLEFIVE,CONTENTFIVE,TITLESIX,CONTENTSIX,
TITLESEVEN,CONTENTSEVEN,TITLEALL,
LAYOUTOFBODY,DISIMGTIMES,SCANFORMULA,TURNTOBIGS)
values(@MAXDIAGTEMPLATEID,@MAXDISEASEID,@FREQUENCY4,@DIAGTEMPLATENAME,@TITLEONE,
      @CONTENTONE,@TITLETWO,@CONTENTTWO,@TITLETHREE,
  @CONTENTTHREE,@TITLEFOUR,@CONTENTFOUR,
  @TITLEFIVE,@CONTENTFIVE,@TITLESIX,@CONTENTSIX,
  @TITLESEVEN,@CONTENTSEVEN,@TITLEALL,
  @LAYOUTOFBODY,@DISIMGTIMES,@SCANFORMULA,@TURNTOBIGS);
print '插入DICT_DIAGTEMPLATE表数据';
set @MAXDIAGTEMPLATEID = @MAXDIAGTEMPLATEID+1; 
FETCH NEXT FROM cursor_DICT_DIAGTEMPLATE 
INTO @FREQUENCY4,@DIAGTEMPLATENAME,@TITLEONE,@CONTENTONE,@TITLETWO,@CONTENTTWO,@TITLETHREE,@CONTENTTHREE,@TITLEFOUR,@CONTENTFOUR,@TITLEFIVE,@CONTENTFIVE,@TITLESIX,@CONTENTSIX,@TITLESEVEN,@CONTENTSEVEN,@TITLEALL,@LAYOUTOFBODY,@DISIMGTIMES,@SCANFORMULA,@TURNTOBIGS     
END     
--关闭游标     
CLOSE cursor_DICT_DIAGTEMPLATE     
--释放游标资源     
DEALLOCATE cursor_DICT_DIAGTEMPLATE 
--------------DICT_DIAGTEMPLATE 嵌套---------------------end
set @MAXDISEASEID = @MAXDISEASEID+1;
FETCH NEXT FROM cursor_DICT_DISEASE 
INTO @DISEASEID, @DISEASENAME ,@DISEASECODE,@FREQUENCY3,@ISMASCULINE,@DISEASEORDER     
END     
--关闭游标     
CLOSE cursor_DICT_DISEASE     
--释放游标资源     
DEALLOCATE cursor_DICT_DISEASE 
   --------------DICT_DISEASE 嵌套---------------------end
   
set @MAXOrganID = @MAXOrganID+1;


FETCH NEXT FROM cursor_DICT_ORGAN 
INTO @OrganID,@NAME,@CODE,@FREQUENCY     
END     
--关闭游标     
CLOSE cursor_DICT_ORGAN     
--释放游标资源     
DEALLOCATE cursor_DICT_ORGAN 


GO
--存储过程 CopyBaseDict_T 结束
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值