Solución Confirmada / deadlock-anidados-sql-server

Deadlock entre transacciones en procedimientos almacenados anidados

SQL Server Deadlocks

Diagnóstico del error

Los procedimientos almacenados A y B intentan acceder a los mismos recursos en un orden diferente, causando un ciclo de espera. Por ejemplo, el procedimiento A adquiere el bloqueo en la tabla `Usuarios`, mientras que el procedimiento B adquiere el bloqueo en la tabla `Pedidos` y luego intenta acceder a `Usuarios`.

Fix Sugerido
Reorganizar la lógica para que ambos procedimientos soliciten los bloqueos en el mismo orden. Por ejemplo, siempre accede a `Usuarios` antes que `Pedidos`:

```sql
BEGIN TRANSACTION;
SELECT * FROM Usuarios WITH (UPDLOCK);
UPDATE Usuarios SET last_access = GETDATE() WHERE id = @UserId;

-- Llamada al procedimiento B
EXEC ProcedimientoB @UserId;

COMMIT;
```

Recursos Premium para SQL Server Deadlocks

Otras consultas relacionadas