設定讀數據時候不鎖的兩種方式

   有些报表或者只抓取数据的时候,允许脏读,但是不希望锁住数据,发生死锁的情况。

在语句上可以使用下面的两种方法:

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;
需要注意的是:如果在设定数据库的时候只是用第二句,会造成无法运行完,只有三句一起,才能很快地执行完。

posted @ 2012-09-26 16:50  老飞飞  阅读(162)  评论(0)    收藏  举报