Показать сообщение отдельно
Старый 21.02.2014, 20:36   #151  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от Vadik Посмотреть сообщение
Варианты
  • Есть обработка дубликатов в catch секции
  • Код вырван из контекста (приведен не полностью)
  • Действительно ерунда

Так как SERIALIZABLE уровень изоляции не используется, даже при использовании конструкций вида

X++:
ttsbegin;

if (exists())
{
    doSomethingBeforeUpdate();
    update();
}
else
{    
    doSomethingBeforeInsert();
    insert();
}

ttscommit;
в Create / Update сценарии в принципе не исключен вариант создания дубликата другим процесом во время doSomethingBeforeInsert(), так что в следуюший retry блок пойдет по "правильной" (update) ветке. Ну а если количество таких "промахов" превышает пороговое значение (в этом случае - 5) - наверное есть какие-то проблемы с логикой и пора признаться - "не шмогла". Как-то так
Кстати там именно такого плана код был, насколько мне сказали сегодня. (код не мой, я просто разместил объяву )