uncommitted - sql bloqueo de tablas
¿Cómo bloqueo ciertas filas de SQL mientras ejecuto un proceso en ellas? (4)
Probablemente desee establecer un nivel de aislamiento para toda la transacción en lugar de usar con (rowlock) en tablas específicas.
Mira esta página:
http://msdn.microsoft.com/en-us/library/ms173763.aspx
Específicamente, busque "bloqueo de fila" dentro de él y creo que encontrará que LEER COMPROMETIDA o REPETIBLE LEER es lo que quiere. LEA COMPROMETIDO es el valor predeterminado de SQL Server. Si LEER COMPROMETIDO no parece lo suficientemente fuerte para ti, entonces ve a REPEATABLE READ.
Actualización: después de leer una de sus publicaciones de seguimiento, definitivamente desea una lectura repetible. Eso mantendrá el bloqueo hasta que confirme o restituya la transacción.
Mi trabajo tiene una aplicación financiera, escrita en VB.NET
con SQL
, en la que varios usuarios pueden trabajar al mismo tiempo.
En algún momento, un usuario puede decidir publicar el lote de entradas en las que ellos (y posiblemente otras personas) están trabajando actualmente.
Obviamente, ya no quiero que ningún otro usuario agregue , edite o elimine entradas en ese lote una vez que se haya iniciado el proceso de publicación .
Ya he visto que puedo bloquear todos los datos abriendo la transacción SQL en el momento en que se inicia el proceso de publicación, pero el proceso puede ser bastante largo y preferiría no tener la transacción abierta durante los varios minutos que podría llevar completar la función .
¿Hay alguna manera de bloquear solo los registros que sé que necesitan ser operados desde el código VB.NET?
Si está utilizando Oracle, debería seleccionar para actualizar las filas que está bloqueando.
Aquí hay un ejemplo
SELECT address1 , city, country
FROM location
FOR UPDATE;
añadir
with (rowlock)
a su consulta SQL
Artículo de rendimiento de SQL Server
EDIT: ok, entendí mal la pregunta. Lo que quieres es aislamiento de transacción. +1 a Joel :)
envuélvalo en un tran use un holdlock + updlock en el seleccionar
ejemplo
begin tran
select * from
SomeTable (holdlock,updlock)
where ....
processing here
commit