SQL SERVER 游标多重嵌套的例子
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,zxf>
-- Create date: <Create 11-7,,>
-- Description: <Description,另存为模板,>
-- =============================================
create PROCEDURE [dbo].[saveTemplate]
@oldTemplateId int,
@templateCode varchar(50),
@name varchar(100),
@info varchar(500),
@type int
AS
BEGIN
declare @G_TemplateId int
exec @G_TemplateId = sp_GetUniqueID 'tb03_template',@G_TemplateId
insert into tb03_template(template_id,template_code,template_name,template_info,isExamine,type)
values(@G_TemplateId,@templateCode,@name,@info,0,@type)
declare C_SubProCur cursor for
select template_pro_id,template_pro_seq,template_pro_name,unit,num,template_pro_info
from tb03_template_pro where template_id=@oldTemplateId
declare @templateProId int
declare @templateProSeq int
declare @templateProName varchar(100)
declare @unit int
declare @num int
declare @templateProInfo varchar(500)
open C_SubProCur
fetch next from C_SubProCur into @templateProId,@templateProSeq,@templateProName,@unit,@num,@templateProInfo
while ( @@fetch_status=0 )
begin
declare @G_TemplateProId int
exec @G_TemplateProId = sp_GetUniqueID 'tb03_template_pro',@G_TemplateProId
insert into tb03_template_pro(template_pro_id,template_pro_seq,template_pro_name,unit,num,template_id,isExamine,template_pro_info)
values(@G_TemplateProId,@templateProSeq,@templateProName,@unit,@num,@G_TemplateId,0,@templateProInfo)
--取出质量列表
declare C_QcCur cursor for
select qc_name,qc_code
from tb03_qc_list where template_pro_id=@templateProId
declare @qcName varchar(500)
declare @qcCode varchar(50)
open C_QcCur
fetch next from C_QcCur into @qcName,@qcCode
while ( @@fetch_status=0 )
begin
declare @G_QcId int
exec @G_QcId = sp_GetUniqueID 'tb03_qc_list',@G_QcId
insert into tb03_qc_list(qc_id,qc_name,template_pro_id,qc_code) values
(@G_QcId,@qcName,@G_TemplateProId,@qcCode)
fetch next from C_QcCur into @qcName,@qcCode
end
close C_QcCur
deallocate C_QcCur
--取出预警列表
declare C_WarnCur cursor for
select warn_content,forward_day,type,warn_staff
from tb03_warn_list where template_pro_id=@templateProId
declare @warnContent varchar(1000)
declare @day int
declare @warnType int
declare @warnStaff varchar(50)
open C_WarnCur
fetch next from C_WarnCur into @warnContent,@day,@warnType,@warnStaff
while ( @@fetch_status=0 )
begin
declare @G_WarnId int
exec @G_WarnId = sp_GetUniqueID 'tb03_warn_list',@G_WarnId
insert into tb03_warn_list(warn_id,warn_content,forward_day,type,template_pro_id,warn_staff) values
(@G_WarnId,@warnContent,@day,@warnType,@G_TemplateProId,@warnStaff)
fetch next from C_WarnCur into @warnContent,@day,@warnType,@warnStaff
end
close C_WarnCur
deallocate C_WarnCur
--结束一个子项目,开始下一个
fetch next from C_SubProCur into @templateProId,@templateProSeq,@templateProName,@unit,@num,@templateProInfo
end
close C_SubProCur
deallocate C_SubProCur
END
set QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,zxf>
-- Create date: <Create 11-7,,>
-- Description: <Description,另存为模板,>
-- =============================================
create PROCEDURE [dbo].[saveTemplate]
@oldTemplateId int,
@templateCode varchar(50),
@name varchar(100),
@info varchar(500),
@type int
AS
BEGIN
declare @G_TemplateId int
exec @G_TemplateId = sp_GetUniqueID 'tb03_template',@G_TemplateId
insert into tb03_template(template_id,template_code,template_name,template_info,isExamine,type)
values(@G_TemplateId,@templateCode,@name,@info,0,@type)
declare C_SubProCur cursor for
select template_pro_id,template_pro_seq,template_pro_name,unit,num,template_pro_info
from tb03_template_pro where template_id=@oldTemplateId
declare @templateProId int
declare @templateProSeq int
declare @templateProName varchar(100)
declare @unit int
declare @num int
declare @templateProInfo varchar(500)
open C_SubProCur
fetch next from C_SubProCur into @templateProId,@templateProSeq,@templateProName,@unit,@num,@templateProInfo
while ( @@fetch_status=0 )
begin
declare @G_TemplateProId int
exec @G_TemplateProId = sp_GetUniqueID 'tb03_template_pro',@G_TemplateProId
insert into tb03_template_pro(template_pro_id,template_pro_seq,template_pro_name,unit,num,template_id,isExamine,template_pro_info)
values(@G_TemplateProId,@templateProSeq,@templateProName,@unit,@num,@G_TemplateId,0,@templateProInfo)
--取出质量列表
declare C_QcCur cursor for
select qc_name,qc_code
from tb03_qc_list where template_pro_id=@templateProId
declare @qcName varchar(500)
declare @qcCode varchar(50)
open C_QcCur
fetch next from C_QcCur into @qcName,@qcCode
while ( @@fetch_status=0 )
begin
declare @G_QcId int
exec @G_QcId = sp_GetUniqueID 'tb03_qc_list',@G_QcId
insert into tb03_qc_list(qc_id,qc_name,template_pro_id,qc_code) values
(@G_QcId,@qcName,@G_TemplateProId,@qcCode)
fetch next from C_QcCur into @qcName,@qcCode
end
close C_QcCur
deallocate C_QcCur
--取出预警列表
declare C_WarnCur cursor for
select warn_content,forward_day,type,warn_staff
from tb03_warn_list where template_pro_id=@templateProId
declare @warnContent varchar(1000)
declare @day int
declare @warnType int
declare @warnStaff varchar(50)
open C_WarnCur
fetch next from C_WarnCur into @warnContent,@day,@warnType,@warnStaff
while ( @@fetch_status=0 )
begin
declare @G_WarnId int
exec @G_WarnId = sp_GetUniqueID 'tb03_warn_list',@G_WarnId
insert into tb03_warn_list(warn_id,warn_content,forward_day,type,template_pro_id,warn_staff) values
(@G_WarnId,@warnContent,@day,@warnType,@G_TemplateProId,@warnStaff)
fetch next from C_WarnCur into @warnContent,@day,@warnType,@warnStaff
end
close C_WarnCur
deallocate C_WarnCur
--结束一个子项目,开始下一个
fetch next from C_SubProCur into @templateProId,@templateProSeq,@templateProName,@unit,@num,@templateProInfo
end
close C_SubProCur
deallocate C_SubProCur
END

浙公网安备 33010602011771号