Вашите две изявления придобиват заключвания на редове в различен ред. Това е класически случай за безизходици. Можете да коригирате това, като се уверите, че редът на взетите брави винаги е в някакъв глобален ред (например подреден по ID). Вероятно трябва да обедините двата UPDATE изрази в едно и сортирайте списъка с идентификатори на клиента, преди да го изпратите на SQL Server. За много типични UPDATE планове, това всъщност работи добре (не е гарантирано обаче).
Или добавяте логика за повторен опит, в случай че откриете блокиране (SqlException.Number == 1205 ). Това е по-елегантно, защото не изисква по-дълбоки промени в кода. Но блокиранията имат отражение върху производителността, така че правете това само за ниски нива на блокиране.
Ако вашата паралелна обработка генерира много актуализации, можете да INSERT всички тези актуализации във временна таблица (което може да се направи едновременно) и когато сте готови, изпълнявате едно голямо UPDATE който копира всички отделни записи за актуализиране в главната таблица. Просто променяте източника на присъединяване във вашите примерни заявки.