J'ai une procédure stockée qui lit l'ID d'une ligne avec l'état x, puis définit immédiatement cet ID de lignes à l'état y.Procédure stockée SQL en attente et en exécution séquentielle
Étant donné que cette procédure stockée est appelée par plusieurs applications clientes, les mêmes valeurs sont renvoyées alors qu'en réalité, les 2 exécutions ne devraient pas en trouver dans le statut x.
Je n'utilise rien d'autre que d'encapsuler les actions dans une transaction begin/commit.
exemple rugueux:
Begin Transaction
IF (@Param = '2') -- all
BEGIN
@resultID = (SELECT ... WHERE STATUS_ID = X
END
ELSE
BEGIN
@resultID = (SELECT ... WHERE STATUS_ID = X
END
IF (@ResultID > 0)
BEGIN
UPDATE JOB_QUEUE SET STATUS_ID = Y WHERE ID = @ResultID
END
COMMIT
SELECT * from JOB_QUEUE WHERE ID = @ResultID
D'une certaine façon la requête a retourné la même @resultID
de la table .. donc je présume que je besoin d'un peu de verrouillage ou de quelque chose pour empêcher cela.
Existe-t-il une méthode pour s'assurer que les exécutions de la procédure stockée entraînent simultanément l'exécution de l'une, puis de l'autre (séquentiellement)?
Merci.
Tag dbms produit utilisé. (Ne ressemble pas à ANSI SQL ...) – jarlh
Quel RDBMS est-ce? Veuillez ajouter une balise pour spécifier si vous utilisez 'mysql',' postgresql', 'sql-server',' oracle' ou 'db2' - ou autre chose entièrement. –
HI c'est pour le serveur SQL –