3

我在存储过程中使用开始事务。我有更新数据的代码:

UPDATE
     employee
SET
     name = @name,
     surname = @surname
WHERE
     empId = @empid;

SQL Server 是否对正在更新的行或列进行任何锁定?如果不是这种情况,我将如何防止其他用户在当前更新正在进行时进行另一次更新?它不必在存储过程中,C# 也是一个选项。

4

3 回答 3

3

SQL Server 确实会针对正在访问的对象发出锁定 - 就幕后发生的事情而言,锁定变得非常复杂。

对于您的特定更新语句,假设正在更新单行。

  • 行:更新锁以获取更新数据的访问权限,然后在修改数据时转换为排他锁。

  • Page : Intent Update,当数据被修改时转换为 Intent Exclusive。

  • 表:意图更新。

MS网站上有很多关于锁定模式的细节:http: //msdn.microsoft.com/en-us/library/ms175519 (v=sql.100).aspx

于 2012-04-12T08:54:29.677 回答
1

默认情况下,MSSQL 为 UPDATE 语句创建一个行级锁。将被 UPDATE 语句影响的所有行都将被锁定,以便在更新发生时没有其他用户能够修改这些行。

您可以通过使用锁定提示来修改默认锁定行为:http: //msdn.microsoft.com/en-us/library/aa213026%28v=sql.80%29.aspx

于 2012-04-12T08:58:36.913 回答
0

如果这是存储过程中唯一的语句,那么它就是一个事务。请记住,每个语句都是原子的,无论是否有效,您都无需担心锁定。

于 2012-04-12T08:53:42.037 回答