一条Update语句有必要用显式事务吗?

sdwf 2009-01-29 09:28:07
我在邹建的 中文版SQL SERVER 2000开发与管理应用实例 的5.2.2 使用编号表生成流水号的示例.sql中看到:

--获取新编号的存储过程
CREATE PROC p_NextBH
@Name char(2), --编号种类
@BH nvarchar(20) OUTPUT --新编号
AS
BEGIN TRAN
UPDATE tb_NO WITH(ROWLOCK) SET
@BH=Head+RIGHT(POWER(10,BHLen)+CurrentNo+1,BHLen),
CurrentNo=CurrentNo+1
WHERE Name=@Name
COMMIT TRAN
GO

此存储过程仅有一句Update语句,有必要使用显式事务吗,请前辈们指点。
...全文
277 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
sdwf 2009-03-20
  • 打赏
  • 举报
回复
我觉得唯一的理由就是 当前的隔离级别不是 提交读。
生活真美好 2009-02-06
  • 打赏
  • 举报
回复
我在单语句修改数据时,是不加事务处理的,只有多条修改数据的语句时才用,主要是防止数据调整到一半,出现错误数据。
呵呵,想知道原因,学习...
jfjy_0 2009-02-06
  • 打赏
  • 举报
回复
我也觉得奇怪 要是我的话 也会不加了

这个估计涉及到多人操作问题
sdwf 2009-02-06
  • 打赏
  • 举报
回复
"有必要,应为成功了才提交失败要回滚的":

一条Update语句在默认的自动事务提交模式下,也会自动启动一个事务,而且排他锁是事务结束后才释放,照样能做到:成功了才提交失败要回滚。

这里是问 为什么一条Update语句也要加显式事务。
zhnzzy 2009-02-04
  • 打赏
  • 举报
回复
有必要,应为成功了才提交失败要回滚的
sdwf 2009-02-04
  • 打赏
  • 举报
回复
防止在前台中多人同时进行同一种操作:

显式事务也一样可以 多个事务并发呀,除非 隔离级别为 SERIALIZABLE
feifeiyiwen 2009-01-30
  • 打赏
  • 举报
回复
学习,帮顶
lanmengxjh 2009-01-30
  • 打赏
  • 举报
回复
有必要,至少可以防止在前台中多人同时进行同一种操作.
sdwf 2009-01-29
  • 打赏
  • 举报
回复
一个排他锁是不是在事务结束后才释放?
sdwf 2009-01-29
  • 打赏
  • 举报
回复
我还看到有人写了这么一个存储过程,

CREATE Procedure dbo.UP_UPS_I_GetUpsTxID
(
@oUpsTxIDvarchar(20) out
)
As
Begin
BEGIN TRAN
UPDATE ParSequenceNumber WITH(ROWLOCK)
SET @oUpsTxID = RIGHT('0000000000000' + SequenceID, 20)
,SequenceID = SequenceID + 1
WHERE SequenceType='00'
COMMIT TRAN
End

这个存储过程和上一个存储过程为什么要用 行锁ROWLOCK,Update语句不是自动开启排他锁吗?

34,593

社区成员

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

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