在UPDATE语句中,NOLOCK提示是否在FROM子句中受到尊重?

时间:2010-11-01 15:05:30

标签: sql-server sql-server-2000 nolock hints

给出以下更新声明:

UPDATE @TableVariable
SET city = T2.city
FROM @TableVariable TV
INNER JOIN dbo.TABLE_1 T1 WITH (NOLOCK)
    ON  (TV.customer_id = T1.customer_id)
INNER JOIN dbo.TABLE_2 T2 WITH (NOLOCK)
    ON  (T1.address_id = T2.address_id)

对于TABLE_1和TABLE_2的(NOLOCK)提示是否应该受到尊重?

2 个答案:

答案 0 :(得分:8)

  

对于TABLE_1和TABLE_2的(NOLOCK)提示是否应该受到尊重?

是的,他们会。

请注意,一般来说,这种行为是非常错误,如果您认为自己确实需要这种行为,那么最有可能的是,您应该重新设计数据库和/或应用程序。

NOLOCK提示的目的是什么?为什么要用脏数据更新表变量?

答案 1 :(得分:1)

NoLock暗示几乎以任何方式提高服务器生产力。但是,当访问数据时,可以安全地使用(NOLOCK)提示,但保证当时不会发生变化(例如,一旦将数据部分发布到DB,它将保持不变,或者您知道当前部分数据不会被更改其他用户)或者如果获取旧数据或新数据无关紧要(例如,某些数据经常更改,并且无论如何都不需要保存最新的数据)。 换句话说,您可能会在不同的表格中获得数据分歧......