【发布时间】:2016-12-22 11:10:50
【问题描述】:
我知道我可能在我的应用程序中问一些愚蠢的问题,用户可以创建某种议程,但每天只允许特定数量的议程。所以,用户执行这个伪代码:
select count(*) as created
from Agendas
where agendaDay = 'dd/mm/yyyy'
if created < allowedAgendas {
insert into Agendas ...
}
所有这一切显然必须在互斥的情况下执行。一次只有一个用户可以读取已创建议程的数量,如果允许,还可以插入一个新的。
我该怎么做?
我尝试使用默认的 Read Committed 隔离级别打开事务,但这无济于事,因为在事务期间,其他用户仍然可以通过选择查询同时获取创建的议程的数量,因此请尝试 插入一个新的,即使它不被允许。
我认为更改隔离级别没有帮助。
我该怎么做?
为了测试,我使用的是 SQL Server 2008,而在我们的生产服务器上运行的是 SQL Server 2012。
【问题讨论】:
标签: sql sql-server transactions locking mutual-exclusion