dans le cadre d'un spool j'ai plusieurs process qui scannent une table pour
récupérer un enregistrement.
celui une fois capturé change d'etat pour ne pas etre pris par un autre
processus.
en fait je m'apercoit qu'ils sont attrappés par plusieurs process mais
attendent sagement la fin du lock.
hors j'aimerais plutot qu'ils passent au suivant si la ligne est lockée
comment puis-je proceder ?
voila un peu de code pour vous aider à comprendre
CREATE TABLE TEST (CLE_TEST INT NOT NULL IDENTITY(1,1) PRIMARY KEY, STATUT
INT DEFAULT(0), PRIORITE INT DEFAULT(50))
INSERT INTO TEST (STATUT, PRIORITE) VALUES (1,50)
INSERT INTO TEST (STATUT, PRIORITE) VALUES (1,80)
----ICI c'est la partie qu'executent chaque process pour prendre
l'enregistrement à traiter
-- je suppose que dans le select je dois pouvoir preciser que je ne veux pas
attrapper les enresgitreùent sous lock
DECLARE @CLE_TEST INT
BEGIN TRAN
SELECT TOP 1 @CLE_TEST = CLE_TEST
FROM TEST
WHERE statut = 1
ORDER BY PRIORITE DESC
UPDATE test SET [STATUT] = 2 WHERE [CLE_TEST] = @CLE_TEST
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
TheSteph
Peut être en rajoutant ceci avant BEGIN TRANS :
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
Steph.
"msnews.microsoft.com" wrote in message news:
Bonjour à tous,
dans le cadre d'un spool j'ai plusieurs process qui scannent une table pour récupérer un enregistrement. celui une fois capturé change d'etat pour ne pas etre pris par un autre processus.
en fait je m'apercoit qu'ils sont attrappés par plusieurs process mais attendent sagement la fin du lock. hors j'aimerais plutot qu'ils passent au suivant si la ligne est lockée
comment puis-je proceder ?
voila un peu de code pour vous aider à comprendre
CREATE TABLE TEST (CLE_TEST INT NOT NULL IDENTITY(1,1) PRIMARY KEY, STATUT INT DEFAULT(0), PRIORITE INT DEFAULT(50)) INSERT INTO TEST (STATUT, PRIORITE) VALUES (1,50) INSERT INTO TEST (STATUT, PRIORITE) VALUES (1,80)
----ICI c'est la partie qu'executent chaque process pour prendre l'enregistrement à traiter -- je suppose que dans le select je dois pouvoir preciser que je ne veux pas attrapper les enresgitreùent sous lock
DECLARE @CLE_TEST INT
BEGIN TRAN
SELECT TOP 1 @CLE_TEST = CLE_TEST FROM TEST WHERE statut = 1 ORDER BY PRIORITE DESC
UPDATE test SET [STATUT] = 2 WHERE [CLE_TEST] = @CLE_TEST
COMMIT
Peut être en rajoutant ceci avant BEGIN TRANS :
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
Steph.
"msnews.microsoft.com" <christophe.perez@pjms.fr> wrote in message
news:7FA4B58B-3A67-431B-8C98-D00B9B32B9A1@microsoft.com...
Bonjour à tous,
dans le cadre d'un spool j'ai plusieurs process qui scannent une table
pour
récupérer un enregistrement.
celui une fois capturé change d'etat pour ne pas etre pris par un autre
processus.
en fait je m'apercoit qu'ils sont attrappés par plusieurs process mais
attendent sagement la fin du lock.
hors j'aimerais plutot qu'ils passent au suivant si la ligne est lockée
comment puis-je proceder ?
voila un peu de code pour vous aider à comprendre
CREATE TABLE TEST (CLE_TEST INT NOT NULL IDENTITY(1,1) PRIMARY KEY, STATUT
INT DEFAULT(0), PRIORITE INT DEFAULT(50))
INSERT INTO TEST (STATUT, PRIORITE) VALUES (1,50)
INSERT INTO TEST (STATUT, PRIORITE) VALUES (1,80)
----ICI c'est la partie qu'executent chaque process pour prendre
l'enregistrement à traiter
-- je suppose que dans le select je dois pouvoir preciser que je ne veux
pas
attrapper les enresgitreùent sous lock
DECLARE @CLE_TEST INT
BEGIN TRAN
SELECT TOP 1 @CLE_TEST = CLE_TEST
FROM TEST
WHERE statut = 1
ORDER BY PRIORITE DESC
UPDATE test SET [STATUT] = 2 WHERE [CLE_TEST] = @CLE_TEST
dans le cadre d'un spool j'ai plusieurs process qui scannent une table pour récupérer un enregistrement. celui une fois capturé change d'etat pour ne pas etre pris par un autre processus.
en fait je m'apercoit qu'ils sont attrappés par plusieurs process mais attendent sagement la fin du lock. hors j'aimerais plutot qu'ils passent au suivant si la ligne est lockée
comment puis-je proceder ?
voila un peu de code pour vous aider à comprendre
CREATE TABLE TEST (CLE_TEST INT NOT NULL IDENTITY(1,1) PRIMARY KEY, STATUT INT DEFAULT(0), PRIORITE INT DEFAULT(50)) INSERT INTO TEST (STATUT, PRIORITE) VALUES (1,50) INSERT INTO TEST (STATUT, PRIORITE) VALUES (1,80)
----ICI c'est la partie qu'executent chaque process pour prendre l'enregistrement à traiter -- je suppose que dans le select je dois pouvoir preciser que je ne veux pas attrapper les enresgitreùent sous lock
DECLARE @CLE_TEST INT
BEGIN TRAN
SELECT TOP 1 @CLE_TEST = CLE_TEST FROM TEST WHERE statut = 1 ORDER BY PRIORITE DESC
UPDATE test SET [STATUT] = 2 WHERE [CLE_TEST] = @CLE_TEST
COMMIT
Patrice
Bonjour,
Je ne suis sans doute pas très au point sur le sujet mais si on a déjà un problème avec une transaction très simple (sinon sans tout le code le contexte global peut aider) au point de vouloir sauter les enregistrements verrouillés, tout mécanisme en ce sens à mon avis ne fera qu'ajouter au problème. Un peu au feeling je dirais : - voir déjà si le problème n'est pas que le SELECT parcours plus d'enregistrements que nécessaire j'essaierai par exemple un ORDER BY PRIORITE,CLE_TEST avec l'index correspondant - attention à ce que le nombre de process ne soit pas contreproductif - en écrivant je me dis que l'on pourrait aussi imaginer qu'un process prenne préférentiellement d'autres enregistrements que les autres process (peut-être via un modulo par exemple) mais je creuserais d'abord pour voir donc si les locks peuvent être plus courts...
-- Patrice
"msnews.microsoft.com" a écrit dans le message de groupe de discussion :
Bonjour à tous,
dans le cadre d'un spool j'ai plusieurs process qui scannent une table pour récupérer un enregistrement. celui une fois capturé change d'etat pour ne pas etre pris par un autre processus.
en fait je m'apercoit qu'ils sont attrappés par plusieurs process mais attendent sagement la fin du lock. hors j'aimerais plutot qu'ils passent au suivant si la ligne est lockée
comment puis-je proceder ?
voila un peu de code pour vous aider à comprendre
CREATE TABLE TEST (CLE_TEST INT NOT NULL IDENTITY(1,1) PRIMARY KEY, STATUT INT DEFAULT(0), PRIORITE INT DEFAULT(50)) INSERT INTO TEST (STATUT, PRIORITE) VALUES (1,50) INSERT INTO TEST (STATUT, PRIORITE) VALUES (1,80)
----ICI c'est la partie qu'executent chaque process pour prendre l'enregistrement à traiter -- je suppose que dans le select je dois pouvoir preciser que je ne veux pas attrapper les enresgitreùent sous lock
DECLARE @CLE_TEST INT
BEGIN TRAN
SELECT TOP 1 @CLE_TEST = CLE_TEST FROM TEST WHERE statut = 1 ORDER BY PRIORITE DESC
UPDATE test SET [STATUT] = 2 WHERE [CLE_TEST] = @CLE_TEST
COMMIT
Bonjour,
Je ne suis sans doute pas très au point sur le sujet mais si on a déjà un
problème avec une transaction très simple (sinon sans tout le code le
contexte global peut aider) au point de vouloir sauter les enregistrements
verrouillés, tout mécanisme en ce sens à mon avis ne fera qu'ajouter au
problème. Un peu au feeling je dirais :
- voir déjà si le problème n'est pas que le SELECT parcours plus
d'enregistrements que nécessaire j'essaierai par exemple un ORDER BY
PRIORITE,CLE_TEST avec l'index correspondant
- attention à ce que le nombre de process ne soit pas contreproductif
- en écrivant je me dis que l'on pourrait aussi imaginer qu'un process
prenne préférentiellement d'autres enregistrements que les autres process
(peut-être via un modulo par exemple) mais je creuserais d'abord pour voir
donc si les locks peuvent être plus courts...
--
Patrice
"msnews.microsoft.com" <christophe.perez@pjms.fr> a écrit dans le message de
groupe de discussion : 7FA4B58B-3A67-431B-8C98-D00B9B32B9A1@microsoft.com...
Bonjour à tous,
dans le cadre d'un spool j'ai plusieurs process qui scannent une table
pour
récupérer un enregistrement.
celui une fois capturé change d'etat pour ne pas etre pris par un autre
processus.
en fait je m'apercoit qu'ils sont attrappés par plusieurs process mais
attendent sagement la fin du lock.
hors j'aimerais plutot qu'ils passent au suivant si la ligne est lockée
comment puis-je proceder ?
voila un peu de code pour vous aider à comprendre
CREATE TABLE TEST (CLE_TEST INT NOT NULL IDENTITY(1,1) PRIMARY KEY, STATUT
INT DEFAULT(0), PRIORITE INT DEFAULT(50))
INSERT INTO TEST (STATUT, PRIORITE) VALUES (1,50)
INSERT INTO TEST (STATUT, PRIORITE) VALUES (1,80)
----ICI c'est la partie qu'executent chaque process pour prendre
l'enregistrement à traiter
-- je suppose que dans le select je dois pouvoir preciser que je ne veux
pas
attrapper les enresgitreùent sous lock
DECLARE @CLE_TEST INT
BEGIN TRAN
SELECT TOP 1 @CLE_TEST = CLE_TEST
FROM TEST
WHERE statut = 1
ORDER BY PRIORITE DESC
UPDATE test SET [STATUT] = 2 WHERE [CLE_TEST] = @CLE_TEST
Je ne suis sans doute pas très au point sur le sujet mais si on a déjà un problème avec une transaction très simple (sinon sans tout le code le contexte global peut aider) au point de vouloir sauter les enregistrements verrouillés, tout mécanisme en ce sens à mon avis ne fera qu'ajouter au problème. Un peu au feeling je dirais : - voir déjà si le problème n'est pas que le SELECT parcours plus d'enregistrements que nécessaire j'essaierai par exemple un ORDER BY PRIORITE,CLE_TEST avec l'index correspondant - attention à ce que le nombre de process ne soit pas contreproductif - en écrivant je me dis que l'on pourrait aussi imaginer qu'un process prenne préférentiellement d'autres enregistrements que les autres process (peut-être via un modulo par exemple) mais je creuserais d'abord pour voir donc si les locks peuvent être plus courts...
-- Patrice
"msnews.microsoft.com" a écrit dans le message de groupe de discussion :
Bonjour à tous,
dans le cadre d'un spool j'ai plusieurs process qui scannent une table pour récupérer un enregistrement. celui une fois capturé change d'etat pour ne pas etre pris par un autre processus.
en fait je m'apercoit qu'ils sont attrappés par plusieurs process mais attendent sagement la fin du lock. hors j'aimerais plutot qu'ils passent au suivant si la ligne est lockée
comment puis-je proceder ?
voila un peu de code pour vous aider à comprendre
CREATE TABLE TEST (CLE_TEST INT NOT NULL IDENTITY(1,1) PRIMARY KEY, STATUT INT DEFAULT(0), PRIORITE INT DEFAULT(50)) INSERT INTO TEST (STATUT, PRIORITE) VALUES (1,50) INSERT INTO TEST (STATUT, PRIORITE) VALUES (1,80)
----ICI c'est la partie qu'executent chaque process pour prendre l'enregistrement à traiter -- je suppose que dans le select je dois pouvoir preciser que je ne veux pas attrapper les enresgitreùent sous lock
DECLARE @CLE_TEST INT
BEGIN TRAN
SELECT TOP 1 @CLE_TEST = CLE_TEST FROM TEST WHERE statut = 1 ORDER BY PRIORITE DESC
UPDATE test SET [STATUT] = 2 WHERE [CLE_TEST] = @CLE_TEST
COMMIT
Fred
Dans : news:, msnews.microsoft.com écrivait :
Bonjour à tous,
dans le cadre d'un spool j'ai plusieurs process qui scannent une table pour récupérer un enregistrement. celui une fois capturé change d'etat pour ne pas etre pris par un autre processus.
en fait je m'apercoit qu'ils sont attrappés par plusieurs process mais attendent sagement la fin du lock. hors j'aimerais plutot qu'ils passent au suivant si la ligne est lockée comment puis-je proceder ?
As-tu essayé de faire l'opération en une seule commande SQL ?
Quelque chose comme : UPDATE TEST SET [STATUT] = 2 FROM (SELECT TOP 1 @CLE_TEST = CLE_TEST FROM TEST WHERE [STATUT] = 1)
-- Fred
Dans : news:7FA4B58B-3A67-431B-8C98-D00B9B32B9A1@microsoft.com,
msnews.microsoft.com écrivait :
Bonjour à tous,
dans le cadre d'un spool j'ai plusieurs process qui scannent une
table pour récupérer un enregistrement.
celui une fois capturé change d'etat pour ne pas etre pris par un
autre processus.
en fait je m'apercoit qu'ils sont attrappés par plusieurs process mais
attendent sagement la fin du lock.
hors j'aimerais plutot qu'ils passent au suivant si la ligne est
lockée
comment puis-je proceder ?
As-tu essayé de faire l'opération en une seule commande SQL ?
Quelque chose comme :
UPDATE TEST
SET [STATUT] = 2
FROM (SELECT TOP 1 @CLE_TEST = CLE_TEST
FROM TEST
WHERE [STATUT] = 1)
dans le cadre d'un spool j'ai plusieurs process qui scannent une table pour récupérer un enregistrement. celui une fois capturé change d'etat pour ne pas etre pris par un autre processus.
en fait je m'apercoit qu'ils sont attrappés par plusieurs process mais attendent sagement la fin du lock. hors j'aimerais plutot qu'ils passent au suivant si la ligne est lockée comment puis-je proceder ?
As-tu essayé de faire l'opération en une seule commande SQL ?
Quelque chose comme : UPDATE TEST SET [STATUT] = 2 FROM (SELECT TOP 1 @CLE_TEST = CLE_TEST FROM TEST WHERE [STATUT] = 1)
-- Fred
Bonsoir Patrice j'avoue ne pas avoir tout suivi à ce que tu veux dire. toujours est'il que le probleme c'est que le select renvoi un seul enregistrement celui à traiter.
en fait le tout est sous une transaction de type serializable
le select prend la ligne dispo via un order de priorité. passe cette derniere à un etat on va dire 2 qui ne fait plus partie du select donc exclu les autre select. toutefois comme se sont des process paralellisés il arrive que certain ai pu attraper la meme ligne mais comme c'est sous transaction le 2e attends sagement la disponibilité de la ligne. hors j'aimerais justement qu'elle passe a la suivante du coup....
voila la philo
"Patrice" <http://www.chez.com/scribe/> a écrit dans le message de news:
Bonjour,
Je ne suis sans doute pas très au point sur le sujet mais si on a déjà un problème avec une transaction très simple (sinon sans tout le code le contexte global peut aider) au point de vouloir sauter les enregistrements verrouillés, tout mécanisme en ce sens à mon avis ne fera qu'ajouter au problème. Un peu au feeling je dirais : - voir déjà si le problème n'est pas que le SELECT parcours plus d'enregistrements que nécessaire j'essaierai par exemple un ORDER BY PRIORITE,CLE_TEST avec l'index correspondant - attention à ce que le nombre de process ne soit pas contreproductif - en écrivant je me dis que l'on pourrait aussi imaginer qu'un process prenne préférentiellement d'autres enregistrements que les autres process (peut-être via un modulo par exemple) mais je creuserais d'abord pour voir donc si les locks peuvent être plus courts...
-- Patrice
"msnews.microsoft.com" a écrit dans le message de groupe de discussion :
Bonjour à tous,
dans le cadre d'un spool j'ai plusieurs process qui scannent une table pour récupérer un enregistrement. celui une fois capturé change d'etat pour ne pas etre pris par un autre processus.
en fait je m'apercoit qu'ils sont attrappés par plusieurs process mais attendent sagement la fin du lock. hors j'aimerais plutot qu'ils passent au suivant si la ligne est lockée
comment puis-je proceder ?
voila un peu de code pour vous aider à comprendre
CREATE TABLE TEST (CLE_TEST INT NOT NULL IDENTITY(1,1) PRIMARY KEY, STATUT INT DEFAULT(0), PRIORITE INT DEFAULT(50)) INSERT INTO TEST (STATUT, PRIORITE) VALUES (1,50) INSERT INTO TEST (STATUT, PRIORITE) VALUES (1,80)
----ICI c'est la partie qu'executent chaque process pour prendre l'enregistrement à traiter -- je suppose que dans le select je dois pouvoir preciser que je ne veux pas attrapper les enresgitreùent sous lock
DECLARE @CLE_TEST INT
BEGIN TRAN
SELECT TOP 1 @CLE_TEST = CLE_TEST FROM TEST WHERE statut = 1 ORDER BY PRIORITE DESC
UPDATE test SET [STATUT] = 2 WHERE [CLE_TEST] = @CLE_TEST
COMMIT
Bonsoir Patrice j'avoue ne pas avoir tout suivi à ce que tu veux dire.
toujours est'il que le probleme c'est que le select renvoi un seul
enregistrement celui à traiter.
en fait le tout est sous une transaction de type serializable
le select prend la ligne dispo via un order de priorité.
passe cette derniere à un etat on va dire 2 qui ne fait plus partie du
select donc exclu les autre select.
toutefois comme se sont des process paralellisés il arrive que certain ai pu
attraper la meme ligne mais comme c'est sous transaction le 2e attends
sagement la disponibilité de la ligne. hors j'aimerais justement qu'elle
passe a la suivante du coup....
voila la philo
"Patrice" <http://www.chez.com/scribe/> a écrit dans le message de
news:5364BE21-E0E3-4ADF-B30F-0074F0F35F4B@microsoft.com...
Bonjour,
Je ne suis sans doute pas très au point sur le sujet mais si on a déjà un
problème avec une transaction très simple (sinon sans tout le code le
contexte global peut aider) au point de vouloir sauter les enregistrements
verrouillés, tout mécanisme en ce sens à mon avis ne fera qu'ajouter au
problème. Un peu au feeling je dirais :
- voir déjà si le problème n'est pas que le SELECT parcours plus
d'enregistrements que nécessaire j'essaierai par exemple un ORDER BY
PRIORITE,CLE_TEST avec l'index correspondant
- attention à ce que le nombre de process ne soit pas contreproductif
- en écrivant je me dis que l'on pourrait aussi imaginer qu'un process
prenne préférentiellement d'autres enregistrements que les autres process
(peut-être via un modulo par exemple) mais je creuserais d'abord pour voir
donc si les locks peuvent être plus courts...
--
Patrice
"msnews.microsoft.com" <christophe.perez@pjms.fr> a écrit dans le message
de groupe de discussion :
7FA4B58B-3A67-431B-8C98-D00B9B32B9A1@microsoft.com...
Bonjour à tous,
dans le cadre d'un spool j'ai plusieurs process qui scannent une table
pour
récupérer un enregistrement.
celui une fois capturé change d'etat pour ne pas etre pris par un autre
processus.
en fait je m'apercoit qu'ils sont attrappés par plusieurs process mais
attendent sagement la fin du lock.
hors j'aimerais plutot qu'ils passent au suivant si la ligne est lockée
comment puis-je proceder ?
voila un peu de code pour vous aider à comprendre
CREATE TABLE TEST (CLE_TEST INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
STATUT
INT DEFAULT(0), PRIORITE INT DEFAULT(50))
INSERT INTO TEST (STATUT, PRIORITE) VALUES (1,50)
INSERT INTO TEST (STATUT, PRIORITE) VALUES (1,80)
----ICI c'est la partie qu'executent chaque process pour prendre
l'enregistrement à traiter
-- je suppose que dans le select je dois pouvoir preciser que je ne veux
pas
attrapper les enresgitreùent sous lock
DECLARE @CLE_TEST INT
BEGIN TRAN
SELECT TOP 1 @CLE_TEST = CLE_TEST
FROM TEST
WHERE statut = 1
ORDER BY PRIORITE DESC
UPDATE test SET [STATUT] = 2 WHERE [CLE_TEST] = @CLE_TEST
Bonsoir Patrice j'avoue ne pas avoir tout suivi à ce que tu veux dire. toujours est'il que le probleme c'est que le select renvoi un seul enregistrement celui à traiter.
en fait le tout est sous une transaction de type serializable
le select prend la ligne dispo via un order de priorité. passe cette derniere à un etat on va dire 2 qui ne fait plus partie du select donc exclu les autre select. toutefois comme se sont des process paralellisés il arrive que certain ai pu attraper la meme ligne mais comme c'est sous transaction le 2e attends sagement la disponibilité de la ligne. hors j'aimerais justement qu'elle passe a la suivante du coup....
voila la philo
"Patrice" <http://www.chez.com/scribe/> a écrit dans le message de news:
Bonjour,
Je ne suis sans doute pas très au point sur le sujet mais si on a déjà un problème avec une transaction très simple (sinon sans tout le code le contexte global peut aider) au point de vouloir sauter les enregistrements verrouillés, tout mécanisme en ce sens à mon avis ne fera qu'ajouter au problème. Un peu au feeling je dirais : - voir déjà si le problème n'est pas que le SELECT parcours plus d'enregistrements que nécessaire j'essaierai par exemple un ORDER BY PRIORITE,CLE_TEST avec l'index correspondant - attention à ce que le nombre de process ne soit pas contreproductif - en écrivant je me dis que l'on pourrait aussi imaginer qu'un process prenne préférentiellement d'autres enregistrements que les autres process (peut-être via un modulo par exemple) mais je creuserais d'abord pour voir donc si les locks peuvent être plus courts...
-- Patrice
"msnews.microsoft.com" a écrit dans le message de groupe de discussion :
Bonjour à tous,
dans le cadre d'un spool j'ai plusieurs process qui scannent une table pour récupérer un enregistrement. celui une fois capturé change d'etat pour ne pas etre pris par un autre processus.
en fait je m'apercoit qu'ils sont attrappés par plusieurs process mais attendent sagement la fin du lock. hors j'aimerais plutot qu'ils passent au suivant si la ligne est lockée
comment puis-je proceder ?
voila un peu de code pour vous aider à comprendre
CREATE TABLE TEST (CLE_TEST INT NOT NULL IDENTITY(1,1) PRIMARY KEY, STATUT INT DEFAULT(0), PRIORITE INT DEFAULT(50)) INSERT INTO TEST (STATUT, PRIORITE) VALUES (1,50) INSERT INTO TEST (STATUT, PRIORITE) VALUES (1,80)
----ICI c'est la partie qu'executent chaque process pour prendre l'enregistrement à traiter -- je suppose que dans le select je dois pouvoir preciser que je ne veux pas attrapper les enresgitreùent sous lock
DECLARE @CLE_TEST INT
BEGIN TRAN
SELECT TOP 1 @CLE_TEST = CLE_TEST FROM TEST WHERE statut = 1 ORDER BY PRIORITE DESC
UPDATE test SET [STATUT] = 2 WHERE [CLE_TEST] = @CLE_TEST
COMMIT
Alors apparemment j'ai reçu la soluce !
il faut que dans mon select je rajoute la clause with(readpast) et il saute les enregistrement sous verrou et donc dans mon cas il prend le suivant c'est exactement ce que je voulais.
Merci à bruno reiter pour cette soluce. Ch.
"Fred" a écrit dans le message de news:%
Dans : news:, msnews.microsoft.com écrivait :
Bonjour à tous,
dans le cadre d'un spool j'ai plusieurs process qui scannent une table pour récupérer un enregistrement. celui une fois capturé change d'etat pour ne pas etre pris par un autre processus.
en fait je m'apercoit qu'ils sont attrappés par plusieurs process mais attendent sagement la fin du lock. hors j'aimerais plutot qu'ils passent au suivant si la ligne est lockée comment puis-je proceder ?
As-tu essayé de faire l'opération en une seule commande SQL ?
Quelque chose comme : UPDATE TEST SET [STATUT] = 2 FROM (SELECT TOP 1 @CLE_TEST = CLE_TEST FROM TEST WHERE [STATUT] = 1)
-- Fred
Alors apparemment j'ai reçu la soluce !
il faut que dans mon select je rajoute la clause with(readpast) et il saute
les enregistrement sous verrou et donc dans mon cas il prend le suivant
c'est exactement ce que je voulais.
Merci à bruno reiter pour cette soluce.
Ch.
"Fred" <foleide@free.fr.invalid> a écrit dans le message de
news:%23mwXac1DJHA.1180@TK2MSFTNGP04.phx.gbl...
Dans : news:7FA4B58B-3A67-431B-8C98-D00B9B32B9A1@microsoft.com,
msnews.microsoft.com écrivait :
Bonjour à tous,
dans le cadre d'un spool j'ai plusieurs process qui scannent une
table pour récupérer un enregistrement.
celui une fois capturé change d'etat pour ne pas etre pris par un
autre processus.
en fait je m'apercoit qu'ils sont attrappés par plusieurs process mais
attendent sagement la fin du lock.
hors j'aimerais plutot qu'ils passent au suivant si la ligne est
lockée
comment puis-je proceder ?
As-tu essayé de faire l'opération en une seule commande SQL ?
Quelque chose comme :
UPDATE TEST
SET [STATUT] = 2
FROM (SELECT TOP 1 @CLE_TEST = CLE_TEST
FROM TEST
WHERE [STATUT] = 1)
il faut que dans mon select je rajoute la clause with(readpast) et il saute les enregistrement sous verrou et donc dans mon cas il prend le suivant c'est exactement ce que je voulais.
Merci à bruno reiter pour cette soluce. Ch.
"Fred" a écrit dans le message de news:%
Dans : news:, msnews.microsoft.com écrivait :
Bonjour à tous,
dans le cadre d'un spool j'ai plusieurs process qui scannent une table pour récupérer un enregistrement. celui une fois capturé change d'etat pour ne pas etre pris par un autre processus.
en fait je m'apercoit qu'ils sont attrappés par plusieurs process mais attendent sagement la fin du lock. hors j'aimerais plutot qu'ils passent au suivant si la ligne est lockée comment puis-je proceder ?
As-tu essayé de faire l'opération en une seule commande SQL ?
Quelque chose comme : UPDATE TEST SET [STATUT] = 2 FROM (SELECT TOP 1 @CLE_TEST = CLE_TEST FROM TEST WHERE [STATUT] = 1)