O devi tenere più lucchetti o meno.
La risposta più semplice è andare su NOLOCK
(migliore prestazione) o TABLOCKX
(coerenza senza dover pensare).
Se non puoi usare with (nolock)
a causa dei requisiti di coerenza, puoi aggiungere with (tablockx)
.Ciò significherà effettivamente che solo un thread alla volta può eseguire istruzioni simili:non ci sarà concorrenza.
L'alternativa è analizzare le tue esigenze in modo molto più dettagliato, cosa che non può essere fatta senza capire perché stai aggiornando la tabella, a cosa servono i dati, ecc.
Ad esempio, questa affermazione deve davvero essere inclusa nella transazione? Odora di pulizie:
DELETE FROM [dbo].[t_Log_2]
WHERE [idtm]<'2011-03-12 08:41:57';
Se lo togli dalla transazione e lo inserisci in un batch separato, potresti scoprire che i problemi scompaiono.