sql-server-2005 – T-SQL是否存储过程执行“atomic”?
发布时间:2020-12-12 16:15:49 所属栏目:MsSql教程 来源:网络整理
导读:假设我有一个简单的存储过程,看起来像这样(注意:这只是一个例子,而不是一个实际的过程): CREATE PROCEDURE incrementCounter ASDECLARE @current intSET @current = (select CounterColumn from MyTable) + 1UPDATE MyTableSET CounterColumn = currentGO
假设我有一个简单的存储过程,看起来像这样(注意:这只是一个例子,而不是一个实际的过程):
CREATE PROCEDURE incrementCounter AS DECLARE @current int SET @current = (select CounterColumn from MyTable) + 1 UPDATE MyTable SET CounterColumn = current GO 我们假设我有一个名为’myTable’的表,其中包含一行,’CounterColumn’包含我们当前的计数. 这个存储过程可以同时执行多次吗? 这是可能的: 我叫“incrementCounter”两次.调用A到达设置“当前”变量的点(假设是5).调用B到达设置“当前”变量(也将为5)的位置.呼叫A完成执行,然后呼叫B完成.最后,表应该包含6的值,而是由于执行的重叠而包含5 解决方法这是针对SQL Server的.每个语句都是原子的,但是如果您希望存储过程是原子的(或一般的语句序列),则需要明确地将语句包围在 开始交易 (通常使用BEGIN TRAN和END TRAN). 当然有很多方法可以解决锁定问题,这取决于同时发生了什么,所以您可能需要处理失败事务的策略. (完全讨论可能导致锁定的所有情况,无论您如何设计这个特定的SP,都超出了问题的范围).但是由于原子性,它们仍然会重新出现.在我的经验中,你可能会很好,不知道你的交易量和数据库上的其他活动.请原谅说明明显的. 与流行的误解相反,这将在您的情况下使用默认的交易级别设置. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |