Jeśli wywołania dodatku SP1 następujące po dodatku SP2 są atomowe, należy je połączyć w języku T-SQL. Lub stracić transakcję w języku c#. Niepotrzebnie przedłużasz transakcję za pomocą podróży w obie strony.
Po co też UPDLOCK na SP1UPDLOCK, ale nie na SP1? Nie rozumiem dlaczego. Jeśli problemem są wskazówki dotyczące blokowania, nie używaj ich. Jeśli coś można serializować (dlaczego?), to ponownie, zrób z tego pojedyncze wywołanie atomowe
Pamiętaj, że domyślna wartość to PRZECZYTAJ ZATWIERDZONE
Wreszcie, czy masz na myśli „semafor”, a nie blokadę? Korzystanie z sp_getapplock będzie kontrolować przepływ kodu bez używania blokad danych