У меня очень интересная проблема.
У меня есть таблица, где у меня есть данные, например:
DVDSerialNumbers (идентификатор, дата создания, серийный номер, идентификатор категории)
Мое приложение генерирует серийные номера для DVD, и у меня есть такая команда SQL (выданная моим приложением):
ExecuteQuery("select top {0} SerialNumber from DVDSerialNumbers where CategoryID = {1};" &
"delete from DVDSerialNumbers where ID in (select top{0} ID from DVDSerialNumber where " &
"CategoryID = {1});", n, CategoryID)
ExecuteQuery возвращает результат моего запроса select, но команда delete тоже выполняется.
Обычно я получаю не более n серийных номеров с указанным CategoryID и удаляю их строки.
Однако здесь у меня проблема с параллелизмом.
Если приведенный выше код выполняется дважды в одно и то же время, возможно, результаты будут одинаковыми, однако идея состоит в том, чтобы получить заданный SerialNumber из таблицы только один раз.
Как я могу заставить экземпляр B ждать, пока экземпляр A завершит выполнение этой команды? Должен ли я заблокировать стол? Или я должен заблокировать несколько строк? Или есть лучшее решение?
Заранее спасибо за помощь.