Respuestas:
Ellos son la misma cosa. Si usa la set transaction isolation level
instrucción, se aplicará a todas las tablas en la conexión, por lo que si solo desea una nolock
en una o dos tablas, úsela; de lo contrario, utilice el otro.
Ambos te darán lecturas sucias. Si está de acuerdo con eso, utilícelos. Si no puede tener lecturas sucias, considere las sugerencias snapshot
o en su serializable
lugar.
WITH (NOLOCK) es una pista a nivel de mesa. Establecer el nivel de aislamiento de la transacción en READ_UNCOMMITTED afectará la conexión. La diferencia está en términos de alcance. Consulte READUNCOMMITTED y NOLOCK en la documentación de SQL Server aquí:
http://technet.microsoft.com/en-us/library/ms187373.aspx
Para NIVEL DE AISLAMIENTO DE LA TRANSACCIÓN: http://technet.microsoft.com/en-us/library/ms173763.aspx
En cuanto a las pautas ... una búsqueda aleatoria de StackOverflow y la interweb eléctrica ...
Que yo sepa, la única diferencia es el alcance de los efectos, como dijo Strommy. Pista NOLOCK en una mesa y READ UNCOMMITTED en la sesión.
En cuanto a los problemas que pueden ocurrir, se trata de coherencia. Si le importa, tenga en cuenta que podría obtener lo que se denomina lecturas sucias que podrían influir en la manipulación de otros datos con información incorrecta.
Personalmente, no creo que haya visto ningún problema con esto, pero puede deberse más a cómo uso nolock. Debe tener en cuenta que hay escenarios en los que estará bien usar. Escenarios en los que principalmente está agregando datos nuevos a una tabla, pero tiene otro proceso que viene detrás para verificar un escenario de datos. Eso probablemente estará bien, ya que el flujo principal no incluye volver atrás y actualizar filas durante una lectura.
También creo que en estos días debería considerar el control de simultaneidad de múltiples versiones. Creo que lo agregaron en 2005 y ayuda a evitar que los escritores bloqueen a los lectores al brindarles a los lectores una instantánea de la base de datos para usar. Incluiré un enlace y dejaré más investigación al lector:
Como tiene que usar WITH (NOLOCK) para cada tabla, puede ser molesto escribirlo en cada cláusula FROM o JOIN. Sin embargo, tiene una razón por la que se denomina lectura "sucia". Por lo tanto, debería saber cuándo hace uno y no establecerlo como predeterminado para el alcance de la sesión. ¿Por qué?
Olvidar un WITH (NOLOCK) podría no afectar su programa de una manera muy dramática, sin embargo, hacer una lectura sucia donde no lo desea puede marcar la diferencia en ciertas circunstancias.
Por lo tanto, use WITH (NOLOCK) si se permite que los datos actuales seleccionados sean incorrectos, ya que podrían revertirse más tarde. Esto se utiliza principalmente cuando desea aumentar el rendimiento, y los requisitos del contexto de su aplicación le permiten correr el riesgo de que se muestren datos inconsistentes. Sin embargo, usted o alguien a cargo debe sopesar los pros y los contras de la decisión de usar WITH (NOLOCK).
REPEATABLE READ
lugar deSERIALIZABLE
si no le importan los datos fantasma.SERIALIZABLE
es REALMENTE restrictivo y casi nunca debe usarse (excepto, por ejemplo, en algunas aplicaciones financieras críticas).