rowlock SQL su select
-
28-09-2019 - |
Domanda
Ho un ASP.Net pagina web in cui l'utente seleziona una riga per la modifica. Voglio utilizzare il blocco fila su quella riga e una volta che l'utente termina la modifica e aggiorna un altro utente può modificare quella riga vale a dire Come posso usare scalmo in modo che solo un utente può modificare una riga?
Grazie
Soluzione
Non è possibile bloccare una riga del genere utilizzando le serrature del motore DB.
La maggior parte delle altre strategie si basano su come mantenere la connessione aperta (come sp_getapplock) e questo è senza senso in applicazioni web.
Anche se si imposta una bandiera sulla fila, cosa succede se l'utente chiude il browser semplicemente mid-edit?
suggerirei usando una colonna timestamp / rowversion per rilevare le modifiche alla riga in altre sessioni.
Altri suggerimenti
Qui sto dando due set di SQL per serratura fila durante select.
BEGIN TRAN
SELECT *
FROM authors AU
WITH (HOLDLOCK, ROWLOCK)
WHERE AU.au_id = '274-80-9391'
/* Do all your stuff here while the row is locked */
COMMIT TRAN
Il suggerimento HOLDLOCK
chiede gentilmente di SQL Server per contenere il blocco fino a quando il commit della transazione. Il suggerimento ROWLOCK
chiede gentilmente SQL Server per bloccare solo questa riga anziché con l'emissione di una pagina o tabella di blocco.
Essere consapevoli del fatto che se un sacco di righe sono colpiti, SQL Server prenderà l'iniziativa e aumentare a blocchi di pagina, o avrete un intero esercito di blocchi di riga riempire la memoria del server e impantanarsi elaborazione.
altro
SELECT id From mytable WITH (ROWLOCK, UPDLOCK) WHERE id = 1
un altro buon collegamento che voglio condividere con voi sulla serratura. https://www.mssqltips.com/sqlservertip/1257/processing-data-queues-in-sql-server-with-readpast-and-updlock/
grazie