Tengo una gran tabla que se llena desde una vista. Esto se hace porque la vista tarda mucho tiempo en ejecutarse y es más fácil tener los datos disponibles en una tabla. Se ejecuta un procedimiento de vez en cuando que actualiza la tabla.Bloquear tabla al insertar
TRUNCATE TABLE LargeTable
INSERT INTO LargeTable
SELECT *
FROM viewLargeView
WITH (HOLDLOCK)
me gustaría para bloquear esta tabla al insertar por lo que si alguien trata de seleccionar un registro que no recibirán ninguno después del truncado. El bloqueo que estoy usando parece bloquear la vista y no la tabla.
¿Hay una mejor manera de abordar este problema?
¿Qué hay de abrir una transacción antes de la inserción y cerrarla después? –
Al abrir una transacción, ¿puede otro usuario seleccionarla de la tabla? – JBone
FYI, le recomendaría que utilice DELETE en lugar de TRUNCATE, ya que TRUNCATE es un DDL, en lugar de un DML como DELETE, y por lo tanto requiere mayores permisos. Además, si envuelve esto en una transacción (que es la respuesta correcta a su pregunta), efectivamente realizará el mismo. – RBarryYoung