教程学院
图像设计 多媒体类 机械制图 办公软件 操作系统 系统编程 网站编程 网页制作 数据库类 网络路由 网络工程 网络安全 考试认证
firefox火狐浏览器下载
酷网学院
CAD
AutoCad Cam350 ProEngineer GCcam MATLAB Unigraphics SolidWorks CAXA Solid3000 Cimatron EdgeCAM
系统
安全 防火墙 病毒 WinXP Win2003 Vista
数据库
编程
网络
精彩图库
  当前位置: 库库中文网 · 数据库类教程 · MSSQL教程 · MsSql综合技巧

数据库迁移中,游标逐行处理地时候,commit,rollback放在哪里对比适宜呢?

 
学院最新推荐文章
PS教程推荐
 
『数据库迁移中,游标逐行处理地时候,commit,rollback放在哪里对比适宜呢?』如果文章有大量图片,显示会较慢,请等待图片下载完成
 
作者:Diligenc… 来源:C.S.D.N 点击数: 更新时间:2008-7-21 
如题,commit我是放在insert之后
    rollback我是放在插入错误判断之后。
代码如下:

但是现在还报错误:COMMIT TRANSACTION 请求没有对应的 BEGIN TRANSACTION。这是怎么回事呢?

这个问题第1个回答:
贴出你的语句.
对提交和回滚要作判断,看执行哪一个.我怀疑你没有这一点.把提交执行完了.后来又执行了回滚,导至你上面的错误.

这个问题第2个回答:
引用 1 楼 MSTOP 的回复:
贴出你的语句.
对提交和回滚要作判断,看执行哪一个.我怀疑你没有这一点.把提交执行完了.后来又执行了回滚,导至你上面的错误.


我的存储过程如下:

SQL code

SET QUOTED_IDENTIFIER ON 

GO

SET ANSI_NULLS ON 

GO























-- 区划表迁移存储过程

ALTER       procedure temp_pd_districts

as

declare @districtID varchar(6)

declare @districtNS varchar(8)

declare @districtNL varchar(16)

declare @parentID nvarchar(50)

declare @status   int

declare @postUserId int

declare @updateUserId int

declare @parentLevel int   --上级区划的层次

declare @parentIdTemp int  --上级区划id的临时变量

--declare @newSysareaIdTemp int --新库区划表id临时变量

declare @errorMsg varchar(200) --插入错误显示变量

begin

    -- 插入最大的区划记录‘上海市’

    truncate table TEMP_SYS_AREA

    insert into sqmis.dbo.TEMP_SYS_AREA(pid,area_name,short_name,level_id,code,status,post_user_id,post_time,update_user_id,update_time) 

    values(1,'上海市','本市',1,null,1,0,getDate(),0,getDate());

    

    if @@error<>0

     begin

           -- 插入失败,回滚



           rollback TRANSACTION   

           select top 1 @errorMsg = description from sqmis.dbo.sysmessages where error = @@error  

           insert into sqmis.dbo.temp_exp(pname,tname,tid_value,err,status,hadle) 

        values('temp_pd_districts','districts','','1:'+@errorMsg,-1,null);  

        return;                

     end

    else

    begin

        begin

            commit transaction   

        end        

            -- 从旧库的districts表里取得区划记录

            declare districts cursor for 

            select sq.DistrictID, sq.DistrictNameShort,sq.DistrictNameLong,sq.ParentID  

            from shsqqy.dbo.districts sq 

            where isnull(sq.DistrictID,'')<>'' 

            order by sq.DistrictID asc;    

    

        open districts

        fetch next from districts into @districtID,@districtNS,@districtNL,@parentID

            while (@@FETCH_STATUS<>-1)

            begin

                 -- 获取父id

                 print @parentID;     

                 set @parentIdTemp=0;              

                 select  @parentIdTemp=sa.id,@parentLevel=sa.level_id 

            from sqmis.dbo.TEMP_SYS_AREA  sa 

            where sa.code is null or sa.code=@parentID;    

                 print @parentIdTemp;

                 -- 验证父id是否存在         

                 if @parentIdTemp>0                                

             begin

                print 'start ------------------------------------------------'

                insert into sqmis.dbo.TEMP_SYS_AREA(pid,area_name,short_name,level_id,code,status,post_user_id,post_time,update_user_id,update_time) 

                values(@parentIdTemp,@districtNL,@districtNS,(@parentLevel+1),@districtID,1,0,getDate(),0,getDate())

                 end

            print 'ing ------------------------------------------------'

     

                 if @@error<>0

                 begin

                       -- 插入失败,回滚

                       rollback

                       select top 1 @errorMsg = description from sqmis.dbo.sysmessages where error = @@error  

                       insert into sqmis.dbo.temp_exp(pname,tname,tid_value,err,status,hadle) 

                values('temp_pd_districts','districts',@districtID,'2:'+@errorMsg,-1,null)

                return                                   

                 end

            else

                begin                           

                    commit transaction

                end

            print 'end ------------------------------------------------'

    

                 fetch next from districts into @districtID,@districtNS,@districtNL,@parentID

            end

            close districts

            deallocate districts

    end

end





GO

SET QUOTED_IDENTIFIER OFF 

GO

SET ANSI_NULLS ON 

GO



帮我看下,谢谢了!分不够,我有分了再加吧!

这个问题第3个回答:
ALTER      procedure temp_pd_districts
as
declare @districtID varchar(6)
declare @districtNS varchar(8)
declare @districtNL varchar(16)
declare @parentID nvarchar(50)
declare @status  int
declare @postUserId int
declare @updateUserId int
declare @parentLevel int  --上级区划的层次
declare @parentIdTemp int  --上级区划id的临时变量
--declare @newSysareaIdTemp int --新库区划表id临时变量
declare @errorMsg varchar(200) --插入错误显示变量
begin
    -- 插入最大的区划记录‘上海市’
    truncate table TEMP_SYS_AREA
    begin tran
    insert into sqmis.dbo.TEMP_SYS_AREA(pid,area_name,short_name,level_id,code,status,post_user_id,post_time,update_user_id,update_time)
    values(1,'上海市','本市',1,null,1,0,getDate(),0,getDate());
   
    if @@error <>0
    begin
          -- 插入失败,回滚

          rollback TRANSACTION 
          select top 1 @errorMsg = description from sqmis.dbo.sysmessages where error = @@error 
          insert into sqmis.dbo.temp_exp(pname,tname,tid_value,err,status,hadle)
        values('temp_pd_districts','districts','','1:'+@errorMsg,-1,null); 
        return;               
    end
    else
    begin
        begin
            commit transaction 
        end       
            -- 从旧库的dist

[1] [2] [3] 下一页  

】【关闭窗口
·上页:
·下页:
相关文章
 
     数据库类教程 - MsSql综合技巧
普通教程SQL Server 2008升级顾问
普通教程迁移 Reporting Services
普通教程SQL Server 2008升级报表服务器
普通教程SQL Server 2008 升级Reporting
普通教程SQL Server 2008示例之奥地利广
普通教程SQL Server 2008 示例之微软IT部
普通教程SQL Server 2008示例之日立咨询
普通教程SQL Server2008示例之CyberSavv
普通教程SQL Server 2008示例之CareGrou
普通教程微软商业智能技术详细解说
普通教程通过数据说明和生成报表整合企业
advertisement
关于站点 - 广告服务 - 联系我们 - 版权隐私 - 免责声明 - 合作伙伴 - 程序支持 - 网站地图 - 返回顶部
网站文本地图
版权所有:库库中文 2005-2007 欢迎各种媒体转载我们的原创作品[转载请注明出处]
copyright © 2005-2008 www.QQGB.com online services. all rights reserved. 蜀ICP备05015578
Template designed by Virus. Optimized for 1024x768 to Firefox,Opera and MS-IE6. Site powered by EQL.
红盾
热爱电脑,热爱生活
拥有电脑,拥有生命
让我们享受拥有电脑的时光