como utilizar y definir bloqueos desde el analizador de consulta SQL

23/03/2007 - 12:50 por javi | Informe spam
Hola a todos/as
tengo la siguiente duda
tengo que insertar en una tabla que tiene un campo primary key pero no es
auto
numérico para buscar el id a insertar utilizo el max(id) de ese campo una
vez
he insertado en esa tabla recojo el valor insertado y inserto en otra tabla
que está relacionada con ese campo con una relación externa.
El problema es que pasaría si dos usuarios intentaran realizar este proceso
al
mismo tiempo las claves podrían no ser correctas, para solucionar esto he
pensado utilizar bloqueos que me bloqueen el proceso como podría hacerlo de
la manera
más eficaz
muchas gracias
un saludo

Preguntas similare

Leer las respuestas

#1 Maxi
23/03/2007 - 13:14 | Informe spam
Javi, hace un tiempo escribi este articulo, revisalo porque te puede ayudar
y resuelve tu problema

http://www.microsoft.com/spanish/ms...art187.asp


Salu2

Microsoft MVP SQL Server
Culminis Speaker

"javi" escribió en el mensaje
news:
Hola a todos/as
tengo la siguiente duda
tengo que insertar en una tabla que tiene un campo primary key pero no es
auto
numérico para buscar el id a insertar utilizo el max(id) de ese campo una
vez
he insertado en esa tabla recojo el valor insertado y inserto en otra
tabla
que está relacionada con ese campo con una relación externa.
El problema es que pasaría si dos usuarios intentaran realizar este
proceso al
mismo tiempo las claves podrían no ser correctas, para solucionar esto he
pensado utilizar bloqueos que me bloqueen el proceso como podría hacerlo
de la manera
más eficaz
muchas gracias
un saludo


Respuesta Responder a este mensaje
#2 Juan Carlos
23/03/2007 - 13:18 | Informe spam
Una salida, no necesariamente la solucion :-) , podria ser que en vez
de leer el id, lo captures dentro de un Begin Tran con update, y
dentro hagas el insert, y al final del proceso commitees la
transaccion, eso evitara que dos usuarios recojan el mismo valor de
id. Contra? el segundo usuario estara bloqueado hasta que el primero
termino su transaccion.

Saludos,

Juan Carlos Mendoza

On 23 mar, 06:50, "javi" wrote:
Hola a todos/as
tengo la siguiente duda
tengo que insertar en una tabla que tiene un campo primary key pero no es
auto
numérico para buscar el id a insertar utilizo el max(id) de ese campo una
vez
he insertado en esa tabla recojo el valor insertado y inserto en otra tabla
que está relacionada con ese campo con una relación externa.
El problema es que pasaría si dos usuarios intentaran realizar este proceso
al
mismo tiempo las claves podrían no ser correctas, para solucionar esto he
pensado utilizar bloqueos que me bloqueen el proceso como podría hacerlo de
la manera
más eficaz
muchas gracias
un saludo
Respuesta Responder a este mensaje
#3 Jose Mariano Alvarez
25/03/2007 - 00:59 | Informe spam
Inicia una transaccion.
Luego usa el hint TABLOCK en el INSERT (revisa el manual o ayuda).
Cierra la transaccion.






Saludos
Ing. Jose Mariano Alvarez


(Cambia los ceros por O y saca lo que sobra)


IMPORTANTE

Por favor traten de indicar la versión de SQL y Service Pack.
La inclusión de (CREATE, INSERTS, etc.) para poder reproducir el problema
también ayuda.



"Juan Carlos" wrote in message
news:
Una salida, no necesariamente la solucion :-) , podria ser que en vez
de leer el id, lo captures dentro de un Begin Tran con update, y
dentro hagas el insert, y al final del proceso commitees la
transaccion, eso evitara que dos usuarios recojan el mismo valor de
id. Contra? el segundo usuario estara bloqueado hasta que el primero
termino su transaccion.

Saludos,

Juan Carlos Mendoza

On 23 mar, 06:50, "javi" wrote:
Hola a todos/as
tengo la siguiente duda
tengo que insertar en una tabla que tiene un campo primary key pero no es
auto
numérico para buscar el id a insertar utilizo el max(id) de ese campo una
vez
he insertado en esa tabla recojo el valor insertado y inserto en otra
tabla
que está relacionada con ese campo con una relación externa.
El problema es que pasaría si dos usuarios intentaran realizar este
proceso
al
mismo tiempo las claves podrían no ser correctas, para solucionar esto he
pensado utilizar bloqueos que me bloqueen el proceso como podría hacerlo
de
la manera
más eficaz
muchas gracias
un saludo
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida