En una aplicación muy concurrente podría ocurrir (teóricamente) que los datos que ha leído en la primera selección se modifiquen antes de que se ejecuten las otras selecciones.
Si esa es una situación que podría ocurrir en su aplicación, debe utilizar una transacción para envolver sus selects. Sin embargo, asegúrese de elegir el isolation level correcto, no todos los tipos de transacción garantizan lecturas consistentes.
actualización: Usted también puede encontrar en las soluciones this article actualización/inserciones concurrentes (también conocido como upsert) interesante. Pone varios métodos comunes de upsert a la prueba para ver qué método realmente garantiza que datos no se modifican entre una instrucción de selección y la siguiente. Los resultados son, bueno, impactantes, diría yo.
Utilicé un agente de servicio para un servicio simultáneo alto con un caso similar y tuve un problema de interbloqueo SQL bajo gran volumen. Al aplicar esta sugerencia y ** especialmente ** el referido [artículo] (http://michaeljswart.com/2011/09/mythbusting-concurrent-updateinsert-solutions/) arriba solucionado todos los puntos muertos - gracias :-) – Sia