Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

nolock en FROM

Estas en el tema de nolock en FROM en el foro de SQL Server en Foros del Web. Alguien que sepa bien de bien, la función explicita de nolock, me puede decir que tan necesaria es?? ...y sólo se puede usar en el ...
  #1 (permalink)  
Antiguo 02/06/2007, 01:10
 
Fecha de Ingreso: febrero-2007
Mensajes: 182
Antigüedad: 17 años, 2 meses
Puntos: 0
nolock en FROM

Alguien que sepa bien de bien, la función explicita de nolock, me puede decir que tan necesaria es??
...y sólo se puede usar en el from??, es decir para hacer un join entre tablas siempre use en el where a.codcli = b.codcli,

pero vi, que la usan estilo: INNER JOIN en el from con TABLA(nolock)


gracias
Martin
  #2 (permalink)  
Antiguo 04/06/2007, 08:35
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Re: nolock en FROM

aplica en el select...
no necesariamente con joins...
cuando es agregada, no aplica bloqueos compartidos ni respeta los bloqueos exclusivos... es decir, puedes leer la tabla aun cuando tenga transacciones pendientes (los updates, deletes e inserts, generan estos bloqueos asegurar la integridad de la informacion).

Se utiliza para evitar que un select no quede esperando a que las transacciones de una tabla terminen, ojo, no aplica en todos los casos ya que puede haber informacion sensible en el proceso y nos podria traer problemas en la concurrencia.

Para probar, utiliza el Query Analizer (dos pantallas o sesiones), en la primera genera un insert o update en una tabla (con su correspondiente transaccion) pero no la completes... y en la segunda pantalla intenta hacerle un select a la misma tabla, notaras que mientras no se complete la transaccion el select no se ejecutará, a menos que le agregues el nolock...entonces no importara si la transaccion esta incompleta o no...


Ej.

Código:
1ra pantalla (sesion).

Begin Tran T_MiTran

update MiTabla 
Set MiCampo = @MiValor
Where <MiCondicion>

-- Esta ultima sentencia no la ejecutes
Commit Tran T_MiTran


2da. Pantalla.

Select *
From   MiTabla
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #3 (permalink)  
Antiguo 04/06/2007, 19:57
 
Fecha de Ingreso: febrero-2007
Mensajes: 182
Antigüedad: 17 años, 2 meses
Puntos: 0
Re: nolock en FROM

me encantó la respuesta con ejemplo y todo!!!
muchas gracias loco, me has sido de gran ayuda

un abrazo
Martín
  #4 (permalink)  
Antiguo 05/06/2007, 20:05
 
Fecha de Ingreso: febrero-2007
Mensajes: 182
Antigüedad: 17 años, 2 meses
Puntos: 0
Re: nolock en FROM

mmmmmmmmmmmmmmmm
espera .... probé con el ejemplo que pusiste y no lo entendí o no me pasó lo que describís, tengo sql server 2000
probé:

Begin Tran grande
update grande
Set nombre = 'Martin'
Where nombre ='1'

-- Esta ultima sentencia no la ejecutes
--Commit Tran grande
--2da. Pantalla.

Select *
From grande



que fue el ej que pusiste, con variantes, con nolock, sin comentarios con comentarios, etc, y me da lo mismo...
Indpte del ejemplo, nolock, por lo que dices, se usa si quieres hacer consultas o selecciones aunque haya errores de sintaxis antes de invocar a la seleccion que quieres hacer ¿no??
Gracias
Martin
  #5 (permalink)  
Antiguo 24/06/2007, 20:26
Avatar de Gabo77  
Fecha de Ingreso: noviembre-2006
Mensajes: 381
Antigüedad: 17 años, 5 meses
Puntos: 6
Re: nolock en FROM

El Nolock no sería necesario si logras indexar correctamente tus tablas, y como dice el compañero, debes tener cuidado por que puedes leer y mostrar información que puede no ser real....

Saludos!
  #6 (permalink)  
Antiguo 26/06/2007, 19:44
 
Fecha de Ingreso: febrero-2007
Mensajes: 182
Antigüedad: 17 años, 2 meses
Puntos: 0
Re: nolock en FROM

brillante gracias!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:55.