Pokud jsou volání aktualizace SP1 následovaná aktualizací SP2 atomická, měla by být kombinována v T-SQL. Nebo ztratíte transakci c#. Transakci zbytečně prodlužujete zpátečními cestami.
Také, proč mít UPDLOCK na SP1UPDLOCK, ale ne na SP1? Nechápu proč. Pokud je problém s tipy na zamykání, nepoužívejte je. Pokud je něco serializovatelné (proč?), udělejte to znovu jako jediné atomické volání
Všimněte si, že výchozí hodnota je přesto READ COMMITTED
A konečně, myslíš "semafor" nezamknout? Pomocí sp_getapplock bude řídit tok přes kód bez použití zámků dat