Dépannage de SELECT FOR UPDATE dans SQL Server
Ce problème provient principalement de l'incompatibilité de la syntaxe SELECT FOR UPDATE de style Oracle avec SQL Server . Bien que SQL Server prenne en charge le verrouillage au niveau des lignes via des mécanismes tels que updlock et rowlock, il lui manque un équivalent direct à SELECT FOR UPDATE.
La solution fournie tente d'obtenir le comportement souhaité en utilisant différentes astuces de verrouillage (updlock, xlock, etc.) en conjonction avec d'autres paramètres et techniques (DBCC TRACEON, READPAST). Cependant, comme le reconnaît l'auteur, aucune de ces approches n'émule pleinement le comportement de SELECT FOR UPDATE d'Oracle.
Dans SQL Server, le verrouillage des lignes est généralement appliqué en fonction des conditions spécifiques de la clause WHERE utilisées dans la requête. Cela signifie que le verrouillage se produira uniquement sur les lignes répondant aux critères spécifiés dans la requête. Par conséquent, il n'est pas possible d'empêcher d'autres connexions d'accéder ou de modifier différentes lignes de la même table, même en utilisant des astuces de verrouillage.
La solution ultime de l'auteur impliquait de détecter les exceptions de blocage et de concurrence pour atténuer les problèmes liés à un verrouillage excessif. . De plus, ils ont mis en œuvre l'isolation des instantanés, qui permet d'isoler les transactions les unes des autres, mais présente certaines limites et nécessite la configuration du serveur de base de données.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!