如何在SQL Server

时间:2016-12-22 11:10:51

标签: sql sql-server transactions locking mutual-exclusion

我知道也许我在我的应用程序中问一些愚蠢的用户可以创建一种议程,但每天只允许特定数量的议程。因此,用户执行此伪代码:

select count(*) as created
from Agendas
where agendaDay = 'dd/mm/yyyy'

if  created < allowedAgendas {
  insert into Agendas ...
}

所有这些显然必须在互斥中执行。只有一个用户可以读取已创建的议程数,如果允许,可能会插入新的议程。

我该怎么做?

我尝试使用默认的Read Committed隔离级别打开一个事务,但这没有帮助,因为在事务期间,其他用户仍然可以使用select查询同时获取创建的日程的数量,因此请尝试 即使不允许,也要插入一个新的。

我认为改变隔离级别可能无济于事。

我该怎么做?

为了测试我正在使用SQL Server 2008,而在我们的生产服务器中运行SQL Server 2012。

1 个答案:

答案 0 :(得分:2)

听起来你有一个架构问题,但你可以通过以下方式达到这个要求:

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE

如果你在同一笔交易中读取插入内容,我就不知道问题会在哪里发生,但如果您希望根据计数进行互动输入,那么您可能应该确保您在实现某种排队功能的单个会话中执行此操作