Bloqueos en sql server

Bloqueos y nivel de aislamiento en SQL Server 2005.
Bajo mi punto de vista el punto debil de SQL Server siempre fueron los bloqueos. Conscientes de este problema, Microsoft se ha puesto manos ala obra y parece que en SQL Server 2005 han solucionado el problema.
Para aquellos que no tengan ni idea de que es un bloqueo diremos que un bloqueo se produce cuando un usuario modifica o leedatos en una transacción.
Por ejemplo, imaginemos que estamos actualizando una “factura” de estado “pendiente” a estado “pagado”, durante el tiempo que dura la transacción (antes de hacer COMMIT oROLLBACK), si otro usuario quiere ver el estado de la “factura” … ¿que estado mostramos? ¡los datos están cambiando!. Si devolvemos “pendiente” no sería correcto, ya que el estado ha cambiado a”pagado”, pero si devolvemos “pagado” tampoco es correcto, ya que la transacción podría hacer ROLLBACK y abriamos efectuado una lectura fantasma. SQL Server bloquea la fila (en el mejor de los casos) eimpide el acceso a los datos afectados por la transacción, como consecuentcia el resto de usuarios concurrentes se quedan “bloqueados”, sin posibilidad siquiera de leer los datos. Este es solo uno de losescenarios en los que el “bloqueo” hace acto de presencia, pero hay más.

[Ampliar Imagen] |

Para controlar como afectan los bloqueos a las trasnsacciones, podemos modificar el nivel deaislamiento de las transacciones a través de la instrucción SET TRANSACTION ISOLATION LEVEL. Con esta instrucción controlamos como interpreta la transacción los bloqueos existentes y como genera nuevosbloqueos con sus operaciones de lectura/escritura.
Su sintaxis general es la siguiente:

SET TRANSACTION ISOLATION LEVEL |
Donde puede tomar estosvalores:
* READ COMMITTED – La transacción no puede leer datos modificados por otras transacciones. Permite a otras transacciones pueden modificar los datos que se han leido. Esta opción es la…