5

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

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

我执行删除功能:

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

我试图避免锁定 select 语句以避免死锁,即使我读取了脏数据。但是,不允许使用“with (nolock)”。错误说:

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

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

4

1 回答 1

10

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

您拥有表变量(注意:它不是临时表,而是表变量),因此对它发出 nolock 是没有意义的。您似乎希望对目标表 ActualTable 发出 nolock,但要使用 delete HAS 来持有锁。时期。

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

于 2012-09-28T04:30:02.927 回答