Buenas
Mi consulta es sobre trabajar con with(ROWLOCK).
Abriendo 2 SQL Query Analizer (QA1 y QA2) diferentes introduzco las consulta que sigue
QA1
1- SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
2- BEGIN TRANSACTION aa
3- SELECT * FROM equipo WITH(ROWLOCK) WHERE equ_id = 134
4- UPDATE equipo
SET
equ_tecnico = 'a',
equ_tipo = 1
WHERE equ_id=134 AND equ_tipo = 0
5- COMMIT TRANSACTION aa
QA2
1- SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
2- BEGIN TRANSACTION aa
3- SELECT * FROM equipo WITH(ROWLOCK) WHERE equ_id = 134
4- UPDATE equipo
SET
equ_tecnico = 'b',
equ_tipo = 1
WHERE equ_id=134 AND equ_tipo = 0
5- COMMIT TRANSACTION aa
Por lo que he leído el with(rowlock) bloquea hasta que se commitee la transacción.
Si voy ejecutnado en los 2 Query Analizer paso a paso las consultas (1 1, 2 2, 3 3, 4 4) cuando ejecuto el en QA2 la sentencia 4 llego a un DeadLock. Lo he probado con with(HOLDLOCK, ROWLOCK) y sucede lo mismo.
Por que es esto? No debería qudarse bloqueada la segunda transacción si se ejecutan enforma serializable y isolated?
Gracias,
jsaviola