如何为所有表的存储过程T-SQL设置无锁

如何为所有表的存储过程T-SQL设置无锁,sql,sql-server,tsql,Sql,Sql Server,Tsql,我希望我的桌子不会被锁上。是否可以为存储过程中的所有表设置不锁定。如果我有很多这样的表格,最好的方法是什么: select * from t1 join t2 .. join t3 .. with (nolock) select * from t4 join t4 .. join t5 etc... with (nolock) 您可以在查询级别进行设置: SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 与NOLOCK一样,这允许脏读。如果

我希望我的桌子不会被锁上。是否可以为存储过程中的所有表设置不锁定。如果我有很多这样的表格,最好的方法是什么:

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

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

您可以在查询级别进行设置:

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

与NOLOCK一样,这允许脏读。

如果脏读是一个问题,您可以使用“隔离级别快照”进行研究:这将创建数据库的常规快照并将其用于计算。
缺点是此副本需要额外的内存。

非常感谢!这有帮助!如果在存储过程中使用,这只是存储过程的作用域吗?@qub1n是的,只是查询或存储过程的作用域。@PhilSandler-此语句是否确保没有锁定或锁定将被忽略,从而避免死锁或阻塞?我知道已经两年了,但如果你能回答我的问题,我将不胜感激。你为什么需要诺洛克?无锁无锁/零锁。即使使用NOLOCK,SQL Server也需要/获得
Sch-S
(可扩展性)锁。如果您有性能问题(例如:阻塞的进程、死锁),那么解决方案是优化(例如索引、查询重写)T-SQL源代码。大多数情况下,使用NOLOCK意味着避免/隐藏问题的根本原因。我有一位经理(他认为自己是架构师)强迫团队对所有事情都进行NOLOCK…然后想知道为什么一些数据读取结果看起来不完整。肮脏的书=肮脏的鸟。努力优化你的数据库,而不是放一些乱七八糟的东西。使用DMV查询更容易(因为SQLServer2000的黑暗时代):我不建议这样做,只要你没有认真的理由这么做。它不创建数据库的快照,它使用行版本控制