NOLOCK IN临时表

时间:2012-09-28 03:33:45

标签: sql nolock

我在我的程序中声明了一个表,您可以在下面看到:

Declare @resultTable Table
(
  EmpId int,
  EmpStatusId int,
  CreatedDateTime datetime
)

我执行删除功能:

Delete From ActualTable
Where Id = (Select EmpId from @resultTable with (nolock) where EmpStatusId = @tempId)

我试图避免锁定select语句以避免死锁,即使我读取脏数据。然而,"与(nolock)"不被允许。错误说:

  

关键字'附近有'的语法不正确。如果此语句是公用表表达式或xmlnamespaces子句,则必须以分号结束前一个语句。

有没有办法在临时表中应用NOLOCK?

1 个答案:

答案 0 :(得分:9)

我怀疑你是否在问正确的问题:

你拥有表变量(注意:它不是临时表,而是表变量),所以没有必要对它发出一个nolock。您似乎希望针对目标表ActualTable发出nolock,但是删除HAS以保持锁定。周期。

处理大型删除操作的常用技术是在批量行范围内发出删除。