Update 判断是否成功

绿色_好心情 2014-11-24 02:18:02
begin tran --事物开始
Update cy_bt_Rec_Flow
set Table_Id='123' where Table_Id='456'

Update cy_bt_Rec_Flow
set Table_Id='456' where Table_Id='123'


if(@@Error<0)--判断是否成功
Commit tran ----事物结束
else
RollBack tran--事物轮回



请问是这样判断吗??
...全文
750 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Neo_whl 2014-11-26
  • 打赏
  • 举报
回复

--参考下:
begin try
        begin tran
              Update cy_bt_Rec_Flow
                                   set Table_Id='123'  where Table_Id='456'
              Update cy_bt_Rec_Flow
                                   set Table_Id='456'  where Table_Id='123'
       if @@rowcount>0
       commit
end try
begin catch
        select error_line() as 出错代码行号,error_message()as 错误提示信息
end catch
qq_22232419 2014-11-24
  • 打赏
  • 举报
回复
楼上的这个可行 楼主写的感觉缺少一个变量记录每次执行update语句是否有错误
舞台中央的我 2014-11-24
  • 打赏
  • 举报
回复
DECLARE @myerror INT --用于存储错误号  

SET @myerror=0 

begin tran  --事物开始
 Update cy_bt_Rec_Flow
   set Table_Id='123'  where Table_Id='456'
   
   SET @myerror=@myerror+@@ERROR --如果产生错误,则将错误号累加  

 Update cy_bt_Rec_Flow
set Table_Id='456'  where Table_Id='123'

  SET @myerror=@myerror+@@ERROR --如果产生错误,则将错误号累加 


if(@myerror=0)--判断是否成功
 Commit tran ----事物结束
else
 RollBack tran--事物轮回
这样 应该可以
江南小鱼 2014-11-24
  • 打赏
  • 举报
回复
引用 楼主 u012362008 的回复:
begin tran --事物开始 Update cy_bt_Rec_Flow set Table_Id='123' where Table_Id='456' Update cy_bt_Rec_Flow set Table_Id='456' where Table_Id='123' if(@@Error<0)--判断是否成功 Commit tran ----事物结束 else RollBack tran--事物轮回 请问是这样判断吗??
@@error等于0是执行正常,大于0才是异常。 另外加上 @@rowcount>0,执行语句的影响行数
中国风 2014-11-24
  • 打赏
  • 举报
回复
引用 5 楼 u012362008 的回复:
[quote=引用 3 楼 roy_88 的回复:] 建议这样用SQL2005以上版本,楼主的写法是SQL2000时会这样写,会受到错误阶别影响,造成回滚不了
BEGIN TRY
    BEGIN TRAN  --事物开始
    UPDATE  cy_bt_Rec_Flow
    SET     Table_Id = '123'
    WHERE   Table_Id = '456'

    UPDATE  cy_bt_Rec_Flow
    SET     Table_Id = '456'
    WHERE   Table_Id = '123'


    COMMIT TRAN ----事物结束
END TRY
BEGIN CATCH
    ROLLBACK TRAN--事物轮回
END CATCH
我在网上查到的 goto labend 是什么意思 可以去掉“goto labend”吗? http://www.cnblogs.com/ChengDong/archive/2013/01/07/2849996.html[/quote] 这是SQL2000时用的方法,有的错误级别是回滚不了的
绿色_好心情 2014-11-24
  • 打赏
  • 举报
回复
有2000的事物回滚方法吗
绿色_好心情 2014-11-24
  • 打赏
  • 举报
回复
引用 3 楼 roy_88 的回复:
建议这样用SQL2005以上版本,楼主的写法是SQL2000时会这样写,会受到错误阶别影响,造成回滚不了
BEGIN TRY
BEGIN TRAN --事物开始
UPDATE cy_bt_Rec_Flow
SET Table_Id = '123'
WHERE Table_Id = '456'

UPDATE cy_bt_Rec_Flow
SET Table_Id = '456'
WHERE Table_Id = '123'


COMMIT TRAN ----事物结束
END TRY
BEGIN CATCH
ROLLBACK TRAN--事物轮回
END CATCH



我在网上查到的


goto labend 是什么意思 可以去掉“goto labend”吗?

http://www.cnblogs.com/ChengDong/archive/2013/01/07/2849996.html
發糞塗牆 2014-11-24
  • 打赏
  • 举报
回复
如果2005及以上版本用try /catch
中国风 2014-11-24
  • 打赏
  • 举报
回复
建议这样用SQL2005以上版本,楼主的写法是SQL2000时会这样写,会受到错误阶别影响,造成回滚不了
BEGIN TRY
    BEGIN TRAN  --事物开始
    UPDATE  cy_bt_Rec_Flow
    SET     Table_Id = '123'
    WHERE   Table_Id = '456'

    UPDATE  cy_bt_Rec_Flow
    SET     Table_Id = '456'
    WHERE   Table_Id = '123'


    COMMIT TRAN ----事物结束
END TRY
BEGIN CATCH
    ROLLBACK TRAN--事物轮回
END CATCH
绿色_好心情 2014-11-24
  • 打赏
  • 举报
回复
引用 1 楼 DBA_Huangzj 的回复:
你要判断一个事务还是一个语句?@@Error是针对上一个语句,而不是一个事务。http://msdn.microsoft.com/zh-cn/library/ms188790.aspx
我想在程序中加上一个 事物来判断Update是否修改成功,如果不成功就回滚,该如何?
發糞塗牆 2014-11-24
  • 打赏
  • 举报
回复
你要判断一个事务还是一个语句?@@Error是针对上一个语句,而不是一个事务。http://msdn.microsoft.com/zh-cn/library/ms188790.aspx

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧