碰到个难题, 头大了, 各位来帮个忙,

icelovey 2010-03-09 11:57:03
程序最近经常出现这个问题, 具体是这样的,
数据库出现了阻塞或者死锁, 导致某个用户之前很多操作全部都回滚了, 但是那些操作都是不同的存储过程.
而且不同存储过程里面都是有单独的事务回滚或者提交的. 按理说不会一下全部回滚.

然后我检查同事写的代码, 发现新加的代码中有段这样的代码, 我看着感觉有点问题, 高手帮忙看看

declare @Tran nvarchar(50)
SET @Tran='ChgPoQty'
BEGIN TRAN @Tran

..........

if @count1=0
begin
RAISERROR ('NO item poqty need to update!', 16, 1)
RETURN
end

.......
COMMIT TRAN @Tran

上面那样写是不是有问题啊,
我一般是这样写的

IF @@ERROR<>0
BEGIN
ROLLBACK TRAN @Tran
RAISERROR ('error occur. contact programer', 16, 1)
RETURN
END

会不会有可能导致事务没有回滚, 一直占在SQL SERVER

...全文
98 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
SQL77 2010-03-09
  • 打赏
  • 举报
回复
应该要用ROLLBACK 来回滚
Garnett_KG 2010-03-09
  • 打赏
  • 举报
回复
if @count1=0
begin
RAISERROR ('NO item poqty need to update!', 16, 1)
RETURN
end

return之後,事务还是处理未提交状态.
playwarcraft 2010-03-09
  • 打赏
  • 举报
回复
好像会自己commit
可以测一下
icelovey 2010-03-09
  • 打赏
  • 举报
回复
是啊, 我找了很久才发现, 似乎这段代码有问题, 不是我写的, 难发现问题啊....
没有ROLLBACK直接RETURN是不是会导致事务没有回滚, 从而出现上面的那种问题啊
SQL77 2010-03-09
  • 打赏
  • 举报
回复
ROLLBACK TRAN @Tran


上面ROLLBACK都没有?
--小F-- 2010-03-09
  • 打赏
  • 举报
回复
不使用的时候最好还是提交事务...
echoxue 2010-03-09
  • 打赏
  • 举报
回复
IF @@ERROR<>0 GOTO err_handle

--

COMMIT TRANSACTION
return

err_handle:
ROLLBACK TRANSACTION
return
SQL77 2010-03-09
  • 打赏
  • 举报
回复
SELECT * FROM sys.dm_tran_active_transactions
这个是05以上的试试
icelovey 2010-03-09
  • 打赏
  • 举报
回复
怎么可以查看没有COMMIT的事务么?

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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