我有一个每天有 100 个用户使用的 .NET 工作流应用程序。此工作流是指更新工作流状态 ID 的表。更新语句正在使用rowlock.
我在 SP 中的更新声明:
update table1 set statuid = a.statId from table2 a with (rowlock) where ID = @ids
我的问题是:这个更新真的需要一个rowlock吗?数据库不能自动处理吗?
我有一个每天有 100 个用户使用的 .NET 工作流应用程序。此工作流是指更新工作流状态 ID 的表。更新语句正在使用rowlock.
我在 SP 中的更新声明:
update table1 set statuid = a.statId from table2 a with (rowlock) where ID = @ids
我的问题是:这个更新真的需要一个rowlock吗?数据库不能自动处理吗?
rowlock在这种情况下你不需要。
update table1 set statuid = a.statId from table2 a where ID = @ids
statId但是,您的示例 SQL 语句假定in只有 1 个值table2。
编辑:
你在评论中说:
表 2 中的 statuid 可以有多个值。但是,ID 在给定时间点是唯一的
我仍然认为没有rowlock必要,但为了安全起见,您应该从 table2 中获取 id 的最大值。
update table1 set statuid = (select max(statId) from table2) where ID = @ids