锁定 SQL Server 存储过程

Posted

技术标签:

【中文标题】锁定 SQL Server 存储过程【英文标题】:Locking in a SQL Server Stored Procedure 【发布时间】:2009-01-20 18:17:50 【问题描述】:

我有一个存储过程,它根据某些标准操作整数表字段(表示序列号) - 标准可以将该字段重置为零。在多用户环境中,该字段可能在被另一个用户更新之前被 1 个用户引用,所以我想通过将存储过程限制为一次只为 1 个用户运行来防止这种情况。有没有办法在我的存储过程中做到这一点?

【问题讨论】:

【参考方案1】:

如果您将语句包装在事务中,它们将全部以原子方式执行。不过,您可能需要根据需要增加transaction isolation level。

例如,如果您不希望其他人在执行一堆语句时读取或写入特定表,则顶部的此语句将实现这一点:

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

我不建议升级到这个级别,除非绝对必要,因为它基本上破坏了并发优势。

相反,请考虑使用较低的内容或重新编写逻辑以消除对关键部分的需求。

【讨论】:

以上是关于锁定 SQL Server 存储过程的主要内容,如果未能解决你的问题,请参考以下文章

db2存储过程

sql server中怎样创建保存数据的存储过程

怎样在Sql server中创建,执行和删除存储过程

SQL Server基础之存储过程

sql server 存储过程如何调用存储过程

SQL Server 存储过程