La Web del Programador: Comunidad de Programadores
 
    Pregunta:  65057 - COMO BLOQUEAR UNA TABLA EN SQL SERVER 2000
Autor:  MANUEL PAREDES
Hola amigos, tengo un inconveniente en una aplicación desarrollada para ser utiliza dentro un ambiente de trabajo multiterminal, es decir varios puntos de venta y punto de facturacón. Pues la clave de la tabla VENTA es autogenerada por codificación (SQL incrustado) y a lavez guardado por cada venta que se inicia, pero una venta puede ser iniciada en tiempos simultaneos desde distinta computadora terminal de la misma red, y es alli en donde sucede el PROBELMA, el cual consiste en que dos o mas terminales obtienen como numero ID para la CLAVE de la VENTA el mismo valor, generando así una CLAVE DUPLICADA cuando la segunda venta es guardada.
Mi pregunta es: como puedo bloquear la tabla VENTA mientras, se autogenera la CLAVE y a vez GUARDO registro en la tabla venta, y de esta forma evitar que la segunda, tercera o mas terminales obtengan el mismo numero valor para el ID de dicha tabla VENTA?
Cabe indicar que este problema sucede muy poco pero sucede y eso quita la calidad a cualquier sistema.

  Respuesta:  Moises orellana
mira yo trabajo con sistemas de ventas y lo que yo hago es tener una funcion folio esta funcion solo entrega numeros de folios como respuesta sumando + 1 y lo guarda automaticamente, esta es una forma la otra es haciendo un timestamp, cuando una terminal solicita folio esta adquiere un numero de id y guarda solo la hora en un campo especifico de la tabla y lo guarda en memoria la fechahora, cuando llega la segunda terminal esta tambien solicita numero de id y tambien actualiza el campo de timestamp y lo guarda en memoria la fechahora, porteriormente cuando vas a grabar la venta vuelves a verificar el timestamp para ver si la hora cambio, si cambio vuelves a solicitar numero de id si no solo grabas. de esta forma siempre tendras un id valido.
espero que estas ideas te sirvan, por lo menos yo no he tenido problemas.
atte
Moises Orellana O.