在 MS SQL Server 2008 R2 中,我想阻止插入但允许多个线程的读取操作
IN MS SQL Server 2008 R2, I want to block insert but allow read operation for multiple threads
我有一个 table,很多线程将在其中运行,它是项目中最重要的 table,但是很多线程在这个 table 上运行。
我有一个要求,如果它的记录数(条件用于获取计数)小于 100,它应该只插入记录。同时其他查询应该能够读取它。
但是由于它是由多个线程读取的,因此它能够插入超过 100 条记录,因为多个线程可以同时获得相同的计数,然后进一步插入记录。我曾尝试使用 READUNCOMMITTED 但它没有帮助
我知道设置事务隔离级别可序列化;会工作,我很累,但它也减慢了读取操作。
关于我如何实现这一点有什么建议吗?
创建一个 table X,其中包含列 ID 和活动。请执行下列操作 -
1. 当线程启动时(或事务启动时)持有 table 上的锁
2.如果能够拿到锁那么
3. 检查是否存在任何活动列,如果是,则循环转到事务开始。
4. 如果不存在活动列,则插入一条记录并激活该记录。
5. 当线程结束时或刚好在完成事务之前使记录处于非活动状态。
6.do 您想要的交易。
我有一个 table,很多线程将在其中运行,它是项目中最重要的 table,但是很多线程在这个 table 上运行。
我有一个要求,如果它的记录数(条件用于获取计数)小于 100,它应该只插入记录。同时其他查询应该能够读取它。 但是由于它是由多个线程读取的,因此它能够插入超过 100 条记录,因为多个线程可以同时获得相同的计数,然后进一步插入记录。我曾尝试使用 READUNCOMMITTED 但它没有帮助
我知道设置事务隔离级别可序列化;会工作,我很累,但它也减慢了读取操作。
关于我如何实现这一点有什么建议吗?
创建一个 table X,其中包含列 ID 和活动。请执行下列操作 - 1. 当线程启动时(或事务启动时)持有 table 上的锁 2.如果能够拿到锁那么 3. 检查是否存在任何活动列,如果是,则循环转到事务开始。 4. 如果不存在活动列,则插入一条记录并激活该记录。 5. 当线程结束时或刚好在完成事务之前使记录处于非活动状态。 6.do 您想要的交易。