我在存储过程中使用开始事务。我有更新数据的代码:
UPDATE
employee
SET
name = @name,
surname = @surname
WHERE
empId = @empid;
SQL Server 是否对正在更新的行或列进行任何锁定?如果不是这种情况,我将如何防止其他用户在当前更新正在进行时进行另一次更新?它不必在存储过程中,C# 也是一个选项。
我在存储过程中使用开始事务。我有更新数据的代码:
UPDATE
employee
SET
name = @name,
surname = @surname
WHERE
empId = @empid;
SQL Server 是否对正在更新的行或列进行任何锁定?如果不是这种情况,我将如何防止其他用户在当前更新正在进行时进行另一次更新?它不必在存储过程中,C# 也是一个选项。
SQL Server 确实会针对正在访问的对象发出锁定 - 就幕后发生的事情而言,锁定变得非常复杂。
对于您的特定更新语句,假设正在更新单行。
行:更新锁以获取更新数据的访问权限,然后在修改数据时转换为排他锁。
Page : Intent Update,当数据被修改时转换为 Intent Exclusive。
MS网站上有很多关于锁定模式的细节:http: //msdn.microsoft.com/en-us/library/ms175519 (v=sql.100).aspx
默认情况下,MSSQL 为 UPDATE 语句创建一个行级锁。将被 UPDATE 语句影响的所有行都将被锁定,以便在更新发生时没有其他用户能够修改这些行。
您可以通过使用锁定提示来修改默认锁定行为:http: //msdn.microsoft.com/en-us/library/aa213026%28v=sql.80%29.aspx
如果这是存储过程中唯一的语句,那么它就是一个事务。请记住,每个语句都是原子的,无论是否有效,您都无需担心锁定。