学习ING

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

posted @ 2009-11-08 12:12  祝雄锋  阅读(8073)  评论(0)    收藏  举报