有些报表或者只抓取数据的时候,允许脏读,但是不希望锁住数据,发生死锁的情况。
在语句上可以使用下面的两种方法:
1)with(nolock)
这种方法比较麻烦,需要在所有表后面都加上此修饰词
如:select a.a,b.b from a with(nolock) left jion b with(nolock) on a.id=b.leftID
2)设定整个存储过程为READ UNCOMMITTED
在这样做之前,需要设定数据库
ALTER DATABASE db1 SET SINGLE_USER WITH ROLLBACK IMMEDIATE ;
ALTER DATABASE db1 SET READ_COMMITTED_SNAPSHOT ON;
ALTER DATABASE db1 SET MULTI_USER;
之后在存储过程的最前面增加
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
需要注意的是:如果在设定数据库的时候只是用第二句,会造成无法运行完,只有三句一起,才能很快地执行完。