Pequeño problema con transacciones en SQL Server

Soltrac

Vereis, tengo una aplicación cliente servidor que hace unas escrituras en una base de datos. El problema es que tengo que sincronizar varias cosas y ayer analizando a un cliente vi que sucedió algo extraño y que no he podido tracear.

Para que nos entendamos todos, voy a simplificar el problema:

Supongamos una base de datos con tabla de una columna de 20 registros. Estos 20 registros tienen una columa con un valor a 0. En esta tabla de vez en cuando se agregan más registros con valor a 0. De vez en cuando, hay un proceso en el servidor que actualiza todos los valores que están a 0 a un número, vamos a llamarlo X.

A su vez, los clientes preguntan por los registros que tienen el número X. El proceso tiene que ser atómico, es decir, o envías todos los registros cuya columna es X o no envías ninguno.

Hasta ahora, yo hacía esto:

El servidor para guardar en una transacción abre una transacción y hace esto:

Abro transacción

SELECT TOP 1000 LoQueSea FROM Tabla WITH(updlock, readpast) WHERE Columna = 0

Si NumeroDeColumnas > 0
    Hago cosas
    Por cada columna
        UPDATE Tabla SET Columna = X WHERE Linea = ESTALINEA
    End Por
End Si

Cierro Transacción

El cliente

SELECT LoQueSea FROM Tabla WHERE Columna = X WITH (updlock, readpast)

La duda viene porque por algún un motivo, el cliente no tiene uno de esos registros. Es la primera veez que ha pasado en 2 años y me gustaría saber si ha podido ocurrir lo siguiente:

El servidor estaba Updateando los registros de 0 a X. A su vez el cliente hizo un select, la transacción debería ser bloqueante por lo que el SELECT solo debe leer o todos los registros de X o ninguno. Ha podido pasar que el cliente recibiera solo algunas líneas transformadas a X y no todas?????

No se si me he explicado bien jejejej.

Soltrac

Edit: Acabo de hacer yo las pruebas con un sistema simulado y no es este el problema, plz, cerrarme el thread : ((((

Usuarios habituales

  • Soltrac