Locks: Sicheres hochzählen in multiuserumgebung

24/11/2008 - 16:06 von mike | Report spam
Hi !

Ich würde gerne einen zàhler in einer tabelle hochzàhlen:

update User1 with (rowlock, xlock)
set counter=(select counterfrom User1 with (rowlock, xlock) where ID=4)+1
where ID=4


ist das threadsicher, ich meine multiusersicher ? oder kann z.b. user2
zwischen select und update des user1 noch den alten wert des zàhlers kriegen,
und dann quasi diesen hochzàhlen und updaten ...

lg mcihael
 

Lesen sie die antworten

#1 Henry Habermacher
24/11/2008 - 16:24 | Warnen spam
Hallo Mike

mike wrote:
Hi !

Ich würde gerne einen zàhler in einer tabelle hochzàhlen:

update User1 with (rowlock, xlock)
set counter=(select counterfrom User1 with (rowlock, xlock) where ID=4)+1
where ID=4


ist das threadsicher, ich meine multiusersicher ? oder kann z.b. user2
zwischen select und update des user1 noch den alten wert des zàhlers
kriegen, und dann quasi diesen hochzàhlen und updaten ...



Ich würde da eher defensiv vorgehen, wenn's sehr kritisch ist:

UPDATE User1 SET counter = counter+1 WHERE ID=4 and counter = (SELECT
counter FROM User1 WHERE ID=4)
WHILE @@ROWCOUNT = 0
UPDATE User1 SET counter = counter+1 WHERE ID=4 and counter = (SELECT
counter FROM User1 WHERE ID=4)

Gruss
Henry


Microsoft MVP Office Access
Keine E-Mails auf Postings in NGs. Danke.
Access FAQ www.donkarl.com

Ähnliche fragen