Des blocages occasionnels sur un SGBDR qui se verrouille comme SQL Server/Sybase sont attendus.
Vous pouvez coder sur le client pour réessayer comme recommandé mon MSDN "Handling Deadlocks" . Fondamentalement, examinez l'exception SQLException et peut-être une demi-seconde plus tard, réessayez.
Sinon, vous devriez revoir votre code afin que tous les accès aux tables soient dans le même ordre. Ou vous pouvez utiliser SET DEADLOCK_PRIORITY pour contrôler qui devient une victime.
Sur MSDN pour SQL Server, il existe "Minimizing Deadlocks" qui commence
Cela mentionne également "Utiliser un niveau d'isolement inférieur" que je n'aime pas (comme de nombreux types SQL ici sur SO) et c'est votre question. Ne le faites pas est la réponse... :-)
- Que peut-il arriver suite à l'utilisation de (nolock) sur chaque SELECT dans SQL Server ?
- https://dba.stackexchange.com/q/2684/630
Remarque :MVCC type RDBMS (Oracle, Postgres) n'ont pas ce problème. Voir http://en.wikipedia.org/wiki/ACID#Locking_vs_multiversioning mais MVCC a d'autres problèmes.