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

sql server 2000 ,事务中地数据更新语句未提交前,@@rowcount 地值有效吗?

学院最新推荐文章
教程推荐
『sql server 2000 ,事务中地数据更新语句未提交前,@@rowcount 地值有效吗?』如果文章有大量图片,显示会较慢,请等待图片下载完成
 
点击数: 更新时间:2008-9-6 
如题
这个问题第1个回答:
在本事务内可以看到,在别的连接内是无效的
这个问题第2个回答:
如果是

SQL code

BEGIN TRANSACTION



...

update ...

if @@rowcount ...  

...



COMMIT TRANSACTION




这样的语句,是有效的

这个问题第3个回答:
在事务内,只要执行了update,@@rowcount就是有效的

这个问题第4个回答:
下面是代码,屏蔽红色行代码后,能正确提交修改。不屏蔽时,就执行了蓝色代码


use swgl

declare  @qsph char(8)
declare  @jzph char(8)
declare  @dpr  char(20)
declare  @retractCount int
declare  @errMsg char(200)


declare @disposeCount_1 int
declare @disposeCount_2 int


set @qsph='80000001'
set @jzph='80000010'
set @dpr='赵艳桃'


begin tran retract

update t_print_billlist
  set flag='0',kjsj=NULL,kjr=''
  where ltrim(rtrim(kcr))=ltrim(rtrim(@dpr)) and
        ltrim(rtrim(kjr))=ltrim(rtrim(@dpr)) and
        flag='1' and
        bill>=@qsph and
        bill <=@jzph
--if @@error <> 0 goto E_Retract_Failset @disposeCount_1 = @@rowcount
print @disposeCount_1

delete from t_print_log
  where ltrim(rtrim(optioner))=ltrim(rtrim(@dpr)) and
        number>=@qsph and
        number <=@jzph and
        flag='1'
--if @@error <> 0 goto E_Retract_Failset @disposeCount_2 = @@rowcount
print @disposeCount_2

-- 检查 处理的数据个数
if @disposeCount_1 <> @disposeCount_2
begin
  print 'check_1'
  set @retractCount = -1
  set @errMsg = '表 t_print_billlist 和 t_print_log 中的数据个数不一致。'
  rollback tran retract
  return
end
if @disposeCount_1 = @disposeCount_2 and @disposeCount_1 = 0
begin
  print 'check_2'
  set @retractCount = 0
  set @errMsg = '没有要撤销的数据。'
  rollback tran retract
  return
end
-- 条件符合,可以提交
print 'commit'
commit tran retract
if @@error <> 0 goto E_Retract_Fail
set @retractCount = @disposeCount_1
return

E_Retract_Fail:
    print 'Fail'
    rollback tran retract
    set @retractCount = -1
    set @errmsg = '发生错误,撤销未完成'
    return

print 'end'

go
这个问题第5个回答:
这样改


SQL code

use   swgl 



declare       @qsph   char(8) 

declare       @jzph   char(8) 

declare       @dpr     char(20) 

declare       @retractCount   int 

declare       @errMsg   char(200) 



declare   @e   int         --增加变量,用于存放@@error



declare   @disposeCount_1   int 

declare   @disposeCount_2   int 





set   @qsph='80000001' 

set   @jzph='80000010' 

set   @dpr='赵艳桃' 





begin   tran   retract 



update   t_print_billlist   

    set   flag='0',kjsj=NULL,kjr=''   

    where   ltrim(rtrim(kcr))=ltrim(rtrim(@dpr))   and   

                ltrim(rtrim(kjr))=ltrim(rtrim(@dpr))   and   

                flag='1'   and   

                bill> =@qsph   and   

                bill <=@jzph 

[color=#FF0000]select @e=@@error,@disposeCount_1   =   @@rowcount 



if   @e   <>   0   goto   E_Retract_Fail



print   @disposeCount_1 [/color]



delete   from   t_print_log   

    where   ltrim(rtrim(optioner))=ltrim(rtrim(@dpr))   and   

                number> =@qsph   and   

                number <=@jzph   and   

                flag='1'   

[color=#FF0000]select @e=@@error,@disposeCount_2   =   @@rowcount 



if   @e   <>   0   goto   E_Retract_Failset



print   @disposeCount_2[/color]



--   检查   处理的数据个数 

if   @disposeCount_1   <>   @disposeCount_2 

begin 

    print   'check_1' 

    set   @retractCount   =   -1 

    set   @errMsg   =   '表   t_print_billlist   和   t_print_log   中的数据个数不一致。' 

    rollback   tran   retract 

    return 

end   

if   @disposeCount_1   =   @disposeCount_2   and   @disposeCount_1   =   0 

begin 

    print   'check_2' 

    set   @retractCount   =   0 

    set   @errMsg   =   '没有要撤销的数据。' 

    rollback   tran   retract 

    return 

end   

--   条件符合,可以提交 

print   'commit' 

commit   tran   retract 

if   @@error   <>   0   goto   E_Retract_Fail 

set   @retractCount   =   @disposeCount_1 

return 



E_Retract_Fail: 

        print   'Fail' 

        rollback   tran   retract 

        set   @retractCount   =   -1 

        set   @errmsg   =   '发生错误,撤销未完成' 

        return 



print   'end' 



go 

 


这个问题第6个回答:
晕,代码里不能设置颜色,搂主把[color=# FF0000]和[/ color]去掉



这个问题第7个回答:
这样改了后,数据能正常处理了,但是处理了 5 条数据后,@e 却显示 1 。
这个问题第8个回答:
我找到问题了:因为在取 @@rowcount 的值前,我先取了 @@error 的值,所以@@rowcount 的值已经不是 update 语句的影响行数了。

作者:21lyw 来源:csdn
】【关闭窗口
·上页:
·下页:
相关文章
     数据库类教程 - MsSql综合技巧
普通教程【脑袋快想爆炸了- -!】 怎么样
普通教程关于级联删除地疑难,新手提问,
普通教程怎么样动态控制列数?
普通教程数据库恢复 MS2000
普通教程当数据库中varchar字段值为null
普通教程create function 怎么才无法要返
普通教程各位帮我看看是啥疑难啊, SQL运
普通教程SQL server 2005 安装疑难 SP2更
普通教程sql update
普通教程update触发器地疑难
普通教程字符串地查询疑难
普通教程安全性--登陆--想建一个用户tes
精彩图片汇集
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.
红盾
热爱电脑,热爱生活
拥有电脑,拥有生命
让我们享受拥有电脑的时光