> Hmm.. jeg kan ikke finde noget om det ved søgning på "SELECT FOR UPDATE ms
> sql" - umidelbart findes den ikke til MS SQL Server - i hvert fald ikke med
> det navn.
Det er vist en gammel ANSI SQL ting, så det fatter jeg ikke. Skomager
metoden kunne være at anvende LOCK TABLE i din SP, men det er jo både
grimt og farligt.
Der MÅ altså findes noget tilsvarende. Jeg er på ingen måde ekspert, men
en cursor med indbygget lås er ikke nogen revolutionerende nyhed i en
veludviklet kommerciel RDBMS.
Øjeblik ...
Jeg fandt følgende afsnit efter lidt søgen:
"Finally, as we said before, in versioning databases reads don't lock
writes, which might be what we want. Is this possible with a versioning
database? Locking-database programmers, when using versioning, tend to
lock too little, introducing subtle concurrency problems. In a
versioning database, there must be a way to do insist on a lock on read.
Ordinarily this is done by doing a SQL SELECT FOR UPDATE. But SQL Server
does not support SELECT FOR UPDATE with the appropriate semantic. There
is, however, a solution. Even when READ_COMMITTED_SNAPSHOT is on, you
can ensure a read lock by using SQL Server's REPEATABLE READ isolation
level, which never does versioning. The SQL Server equivalent of ANSI's
SELECT FOR UPDATE is SELECT with (REPEATABLEREAD). Note that this is
different from the SQL Server UPDLOCK (update lock), which is a special
lock that has similar semantics but only works if all participants in
all transactions are using UPDLOCK. This is one place where programs
written for versioning databases may have to change their code in
porting to SQL Server 2005."
KILDE:
http://www.awprofessional.com/articles/article.asp?p=327394&seqNum=2)
Jeg fandt også følgende oversigt over, hvilke databaser der understøtter
SELECT ... FOR UPDATE. Den er fantisk ganske god. Resten af artiklen
skal du dog ikke hænge dig i, fordi den omhandler en specifik database
universel database driver.
LINK:
http://www.versant.com/resources/documentation/voajdocs/transactions.html
Det er en meget gammel problematik du står over for, og dybest set er
jeg fristet til at henvise dig til programmeringsgruppen. Her kan vi så
tage hul på et gammelt "Design Pattern" der hedder Model View Controller
(MVC) som specifikt er beregnet til at løse dit problem. Men altså ikke
på database nuveau, men på applikationsniveau
Venligst
- Jesper