xlock tablock

29/09/2004 - 15:58 por Kano | Informe spam
Buenas quiro insertar mediante un select insert un numero indeterminado de
filas en una tabla (t1) con identidad,luego quiero recuparar los indices de
las filas insertadas e insertarlos en unasegunda tabla (t2).
Lo que se me ha ocurrido es bloquear en modo exclusivo la tabla1 marcar las
filas insertadas de alguna manera, recuperar sus indices, insertar en t2,
limpiar las marcas y por ultimo liberar el bloqueo.

algo asi como:

Begin trans xxxx

insert t1 (xlock,tablock)
select *,marca=1 from Unatablacualquiera1

insert t2
select codigo from t1where marca=1

commit tran xxxx


el caso esq no se como hacer para bloquear la tabla para q no se cambien las
marcas por cualquier razon fuera de mi control. hay procesos concurrentes
sobre la tabla. estoy mirando para usar las clausulas xlock y tablock. Me
serviran bien? donde debo acplicarlas, a la tabla, a la transacción?
Alguna otra manera para hacerlo?


Gracias por adelatado:

Kano

Preguntas similare

Leer las respuestas

#1 Maxi
29/09/2004 - 17:27 | Informe spam
Hola, para cambiar bliqueos deberias de ver el comando "SET TRANSACTION
ISOLATION LEVEL"

Pero a men de esto, porque quieres hacer esto? o sea poner todo en una
tabla bloquear todo y luego pasar a otra!!

No pensaste en usar algun trigger por ej?


Salu2
Maxi
Buenos Aires - Argentina
Desarrollador Microsoft 3 Estrellas .NET
Nunca consideres el estudio como una obligación sino como
una oportunidad para penetrar en el bello y maravillosos
mundo del saber.
- Albert Einstein



"Kano" <kano01ATterraDOTes> escribió en el mensaje
news:
Buenas quiro insertar mediante un select insert un numero indeterminado de
filas en una tabla (t1) con identidad,luego quiero recuparar los indices


de
las filas insertadas e insertarlos en unasegunda tabla (t2).
Lo que se me ha ocurrido es bloquear en modo exclusivo la tabla1 marcar


las
filas insertadas de alguna manera, recuperar sus indices, insertar en t2,
limpiar las marcas y por ultimo liberar el bloqueo.

algo asi como:

Begin trans xxxx

insert t1 (xlock,tablock)
select *,marca=1 from Unatablacualquiera1

insert t2
select codigo from t1where marca=1

commit tran xxxx


el caso esq no se como hacer para bloquear la tabla para q no se cambien


las
marcas por cualquier razon fuera de mi control. hay procesos concurrentes
sobre la tabla. estoy mirando para usar las clausulas xlock y tablock. Me
serviran bien? donde debo acplicarlas, a la tabla, a la transacción?
Alguna otra manera para hacerlo?


Gracias por adelatado:

Kano







Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.769 / Virus Database: 516 - Release Date: 24/09/2004
Respuesta Responder a este mensaje
#2 Adrian D. Garcia
29/09/2004 - 19:35 | Informe spam
Si lo que deseas es bloquear las filas insertadas y que las mismas solo sean
visibles a la transaccion podes hacer lo siguiente

Begin trans xxxx

insert t1 (xlock,holdlock)
select *,marca=1 from Unatablacualquiera1

insert t2
select codigo from t1where marca=1

commit tran xxxx

El "hint" HOLDLOCK mantiene los locks sobre las filas hasta que finalice la
transaccion. El "HINT" XLOCK te asegurara de generar locks exclusivos.
Ahora hay que tener en cuenta que los locks se generaran tanto sobre las
filas afectadas como tambien sobre los indices. Habria que ver como se
comporta esto con transacciones concurrentes, que nivel de continencia
genera, etc.

Saludos
Adrian D. Garcia
MCSD
NDSoft Consultoria y Desarrollo

"Kano" <kano01ATterraDOTes> wrote in message
news:
Buenas quiro insertar mediante un select insert un numero indeterminado de
filas en una tabla (t1) con identidad,luego quiero recuparar los indices


de
las filas insertadas e insertarlos en unasegunda tabla (t2).
Lo que se me ha ocurrido es bloquear en modo exclusivo la tabla1 marcar


las
filas insertadas de alguna manera, recuperar sus indices, insertar en t2,
limpiar las marcas y por ultimo liberar el bloqueo.

algo asi como:

Begin trans xxxx

insert t1 (xlock,tablock)
select *,marca=1 from Unatablacualquiera1

insert t2
select codigo from t1where marca=1

commit tran xxxx


el caso esq no se como hacer para bloquear la tabla para q no se cambien


las
marcas por cualquier razon fuera de mi control. hay procesos concurrentes
sobre la tabla. estoy mirando para usar las clausulas xlock y tablock. Me
serviran bien? donde debo acplicarlas, a la tabla, a la transacción?
Alguna otra manera para hacerlo?


Gracias por adelatado:

Kano


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida