加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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,都超出了问题的范围).但是由于原子性,它们仍然会重新出现.在我的经验中,你可能会很好,不知道你的交易量和数据库上的其他活动.请原谅说明明显的.

与流行的误解相反,这将在您的情况下使用默认的交易级别设置.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读