2015-10-15 56 views
0

我有一个表,其中很多线程将运行,它是该项目的最重要的表,但很多线程操作这张桌子。在MS SQL Server 2008 R2中,我想阻塞插入,但允许多线程读操作

我有一个要求,如果它的记录计数(其中条件用于计数)小于100,它应该只插入记录。同时其他查询应该能够读取它。 但是由于它被多个线程读取,它可以插入比100多的记录,因为多个线程可以同时获得相同的计数,然后进一步插入记录。我曾尝试使用READUNCOMMITTED,但它不是帮助

我知道SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;将工作,我厌倦它,但它也减缓了阅读操作。

对此我有何建议?

回答

0

使用列Id和活动创建表X.执行以下操作 - 1.线程启动时(或事务开始时)在表上保留锁定 2.如果能够获得锁定,则 3.检查是否存在任何活动列如果是,则循环转到交易开始。 4.如果没有活动列存在,则插入记录并使记录处于活动状态。 5.线程结束时或刚完成事务之前,使记录处于非活动状态。 6.做你想要的交易。