Solución Confirmada / deadlock-anidados-sql-server
Deadlock entre transacciones en procedimientos almacenados anidados
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;
```