So get einen gegenseitigen Ausschluss auf ausgewählte Abfragen in SQL server

Ich weiß, vielleicht frage ich etwas Dummes in meiner Anwendung Benutzer können eine Art von Agenda erstellen, aber nur eine bestimmte Anzahl von Tagesordnungen ist pro Tag erlaubt. So führen die Benutzer diesen Pseudocode ein:

select count(*) as created from Agendas where agendaDay = 'dd/mm/yyyy' if created < allowedAgendas { insert into Agendas ... } 

All dies muss offensichtlich im gegenseitigen Ausschluss ausgeführt werden. Nur ein Benutzer kann die Anzahl der erstellten Tagesordnungen lesen und ggf. einen neuen insert.

Wie kann ich das machen?

Ich habe versucht, eine Transaktion mit Standard Read Committed Isolation Ebene zu öffnen, aber das hilft nicht, weil während der Transaktion die anderen Benutzer immer noch die Anzahl der erstellten Tagesordnungen zur gleichen time mit einer ausgewählten Abfrage erhalten und so versuchen, eine neue einzufügen auch wenn es nicht erlaubt wäre

Ich denke nicht, dass die Änderung der Isolationsstufe helfen könnte.

Wie kann ich das machen?

Zum Testen verwende ich SQL server 2008, während in unserem Produktionsserver SQL server 2012 ausgeführt wird.

es klingt wie man dort ein architekturproblem hat, aber man kann diese anforderung mit erreichen:

 SET TRANSACTION ISOLATION LEVEL SERIALIZABLE 

Wenn Sie eine Einfügung innerhalb der gleichen Transaktion lesen, sehe ich nicht, wo das Problem sein wird, aber wenn Sie erwarten, interaktive Eingabe auf der Grundlage der Zählung dann sollten Sie wahrscheinlich sicherstellen, dass Sie dies in einer einzigen session von implementieren eine Art Warteschlangenfunktionalität