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