J'ai vu une question ici à propos de cela, mais il était vieux, donc je vais demander à nouveau au cas où une solution existe maintenant.SQL Server 2008: SELECT FOR UPDATE
Mon problème est le suivant. J'ai une table de base de données que je souhaite choisir mais je veux verrouiller les rangées que j'ai choisies. La raison en est que je peux avoir un autre processus en cours d'exécution qui voudra également sélectionner les mêmes lignes et je veux empêcher cela. Imaginez que j'ai deux processus faisant la même chose. On effectue une sélection et commence à effectuer son traitement des données. Ensuite, quelques secondes plus tard, le processus suivant arrive et fait une sélection, mais parce que les lignes ne sont pas verrouillées, il prend également les mêmes enregistrements et commence à les traiter. Il s'agit bien sûr d'une mauvaise situation. Dans Oracle, vous pouvez utiliser SELECT FOR UPDATE qui supprimera un verrou sur les lignes pour les empêcher d'être utilisées par le 2ème processus. Comment cela peut-il être réalisé dans SQL Server 2008?
Je devrais ajouter que je ne peux utiliser que des instructions SQL standard. Je n'ai pas accès aux procédures, fonctions, etc. Cela doit être fait par une simple déclaration. C'est une longue histoire et une considération de conception qui a été enlevée de mes mains. La solution doit pouvoir être stockée dans une table, récupérée plus tard puis exécutée via les objets ADO en C# affectés en particulier à un objet de commande.
Comment un verrou peut-il être appliqué à cette instruction?
SELECT *
FROM
(SELECT TOP (20) *
FROM [TMA_NOT_TO_ENTITY_QUEUE]
WHERE [TMA_NOT_TO_ENTITY_QUEUE].[STATE_ID] = 2
ORDER BY TMA_NOT_TO_ENTITY_QUEUE.ID) a
Vous pouvez utiliser [l'indicateur de verrouillage] (http://msdn.microsoft.com/en-us/library/ms187373.aspx) - 'select * from tbl (updlock)' –
Après avoir vu votre dernière modification, utilisez nowait pour retourner dès que la ressource est verrouillée: 'select * from tbl (updlock, nowait)' –
Merci, je vais vous donner un essai – CSharpened