我可以用一个数据库范围的设置适用NOLOCK?
题
有没有一种方法,使WITH(NOLOCK)上的任何SELECT语句运行应用特定的数据库?
解决方案
没有但可以使用快照隔离一> SQL Server 2005和向上的数据库级,它应该有很大的帮助死锁
SQL Server 2005引入扩展引进快照隔离级别的和另外的实施READ的SQL-92隔离级别COMMITTED。新READ_COMMITTED_SNAPSHOT隔离级别可以透明地取代READ COMMITTED所有交易。
在事务内SNAPSHOT隔离指定该数据读永远不会反映由其它同时发生的事务进行的更改。本次交易采用交易开始时存在的数据行版本。无锁被置于当读取数据,因此快照事务不写入数据阻塞其他事务。交易的写入数据不读取数据块的快照事务。你需要通过设置ALLOW_SNAPSHOT_ISOLATION数据库选项,以便用它来启用快照隔离。
在READ_COMMITTED_SNAPSHOT数据库选项确定当快照隔离在数据库中被使能的默认行为READ COMMITTED隔离级别。如果你没有明确指定READ_COMMITTED_SNAPSHOT ON,提交读应用于所有隐性交易。这将产生相同的行为设置READ_COMMITTED_SNAPSHOT OFF(默认值)。当READ_COMMITTED_SNAPSHOT OFF生效时,该数据库引擎使用共享锁强制执行默认隔离级别。如果将READ_COMMITTED_SNAPSHOT数据库选项设置为ON时,数据库引擎使用行版本和快照隔离为默认值,而不是使用锁来保护数据。
其他提示
取决于您的数据库。一些数据库引擎允许你默认为脏读或相似的行为。
实施例,一些MSSQL服务器版本允许您设置数据库快照隔离,这是在SQLMenace的交说明。