Necesito tener una tabla de base de datos MsSql y otros 8 procesos (idénticos) accediendo a la misma tabla en paralelo - haciendo una selección superior n, procesando esas n filas, y actualizando una columna de esas filas. El problema es que necesito seleccionar y procesar cada fila solo una vez. Esto significa que si un proceso llegó a la base de datos y seleccionó las n primeras filas, cuando llegue el segundo proceso debería encontrar esas filas bloqueadas y seleccionar las filas de n a 2 * n filas, y así sucesivamente ...Retorno de filas desbloqueadas en una consulta "seleccionar top n"
¿Es posible poner un candado en algunas filas cuando las selecciona, y cuando alguien solicita las primeras n filas que están bloqueadas para devolver las siguientes filas, y no esperar las bloqueadas? Parece una posibilidad remota, pero ...
Otra cosa que estaba pensando - tal vez no tan elegante, pero suena simple y seguro, es tener en la base de datos un contador para las instancias que hicieron selects en esa tabla. La primera instancia que aparece aumentará el contador y seleccionará la parte superior n, la siguiente incrementará el contador y seleccionará filas de n * (i-1) a n * i, y así sucesivamente ...
¿Esto suena? como un buen ideea? ¿Tienes alguna mejor sugerencia? ¡Cualquier pensamiento es muy apreciado!
Gracias por su tiempo.
Parece que está utilizando una tabla como cola? Puede encontrar [este artículo] (http: // rusanu.com/2010/03/26/using-tables-as-queues /) por [Remus Rusanu] (http://stackoverflow.com/users/105929/remus-rusanu) útil. –
Gracias por el enlace. Fue interesante saber sobre eso, pero como necesito mantener las filas después de seleccionarlas (borrarlas no es una opción), no es realmente aplicable a mi caso. – Diana
Puede tener una columna de bits 'procesada' y sustituir una' ACTUALIZACIÓN' por un 'DELETE' posiblemente. Si decide usar una solución de contador [esta respuesta] (http://stackoverflow.com/questions/3453411/sql-server-auto-incrementation-hathat-allows-update-statements/3462957#3462957) podría ayudar. –