@melnynet

Как сделать ограничение на количество строк по полю в sql server таблице?

Имеется таблица
Id TypeId Name
1 1 Test
2 1 Test2

Имеется приложение на Asp.Net использующее EF Code First.
Из приложения выполняются 2 инсерта в эту таблицу в разных потоках.
Нужно чтобы в таблице было ограничение по полю TypeId на 3 строки.
То есть, если выполнится 2 запроса параллельно, то кто первый выполнится, тот и попадет в таблицу, а второй должен получить ошибку.
Как это можно реализовать?
Возможны варианты как на стороне EF так и на стороне SQL Server.
  • Вопрос задан
  • 524 просмотра
Пригласить эксперта
Ответы на вопрос 1
Реляционная БД не отслеживает (и не должна) зависимости между строками в одной таблице. Нужно использовать синхронизацию через мьютексы/крит.секции на стороне .Net, либо блокировку на стороне SQL Server-а.

Вторая реализуется примерно так:
1. begin tran
2. select @count = count(*) from table with (tablockx)
3. if @count < 3 insert into ...
4. commit

Для пункта 2 можно использовать другую таблицу
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы