2013-12-16 22 views
3

我希望我的表不会被锁定。是否可以为存储过程中的所有表设置NO LOCK。什么是最好的方式,如果我有这样大量的表:如何把所有表的存储过程T-SQL的NO LOCK

select * from t1 
join t2 .. 
join t3 .. with (nolock) 

select * from t4 
join t4 .. 
join t5 etc... 
with (nolock) 
+5

为什么你需要NOLOCK? NOLOCK <>无锁/零锁。即使使用NOLOCK,SQL Server也需要/使用'Sch-S'(稳定性)锁。如果你有性能问题(例如:阻塞的进程,死锁),那么解决方案是优化(如索引,查询重写)T-SQL源代码。大多数情况下,使用NOLOCK意味着避免/隐藏问题的根本原因。 –

+0

我有一个经理(认为他是一名建筑师)强迫团队把所有东西放在一起......然后想知道为什么一些数据读取回来看起来不完整。脏读=脏鸟。努力优化你的数据库,而不是放在一些生气的事情上。使用DMV查询,它更容易(因为SqlServer 2000的黑暗时代):http://sqlserverperformance.wordpress.com/2011/02/04/five-dmv-queries-that-will-make-you-a-superhero -in-2011/ – granadaCoder

+1

我不会推荐这个,只要你没有严肃的理由去做。 –

回答

27

您可以在查询级别设置此:

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 

NOLOCK一样,这允许脏读。

+0

非常感谢!它帮助! – Sergey

+0

这是否仅用于存储过程的范围? – qub1n

+1

@qub1n是的,只是查询或存储过程的范围。 –