Как выполнить оператор выбора (выбрать продукт из продуктов, где ProductID = 8) и выполнить вставку в базу данных в пакетном операторе транзакций для Cosmos DB с использованием .net/c#
Есть ли обходной путь для запуска оператора select как части пакета перед вставкой документа в базу данных Cosmos.
Я не смог найти, как использовать транзакционный пакет для замены существующей хранимой процедуры. имея операторы выбора и вставки.
Моя хранимая процедура:
-НАЧИНАТЬ строка 1: прочитать данные из базы данных и подсчитать количество продуктов. Например: возвращает 12 продуктов.
Строка 2: Еще немного логики.
Строка 3: Вставьте запись в ту же таблицу со счетчиком продуктов, т.е. 12+1, возвращено из строки 1.
-КОНЕЦ
Теперь проблема, с которой я столкнусь, если я перенесу первый оператор из SP, возможно, 2 или несколько экземпляров могут запросить одну и ту же строку и выполнить ее. И в результате я получу дублирование номера журнала в продуктах.





Вы не можете включить запрос в транзакцию. Способ сделать это — прочитать данные, а затем использовать оптимистичный контроль параллелизма для обновления с тегом etag для элемента. Образец вы можете найти здесь
Использование eTag для проверки того, обновлено ли значение, поможет мне перейти к моему решению здесь. большое спасибо youtube.com/watch?v=CKtmntnhR58
Читая перед транзакцией, я попадаю в ситуацию, когда несколько вызовов одной и той же функции в производстве приводят к одному и тому же количеству продуктов, поэтому дальнейшая вставка транзакции добавляет дублирующийся номер журнала в БД. Добавлено больше подробностей о хранимой процедуре в вопросе.