Ho una tabella di grandi dimensioni che viene popolata da una vista. Questo perché la visualizzazione impiega molto tempo per essere eseguita ed è più facile avere i dati facilmente disponibili in una tabella. Una procedura viene eseguita ogni tanto che aggiorna la tabella.Blocco tabella durante l'inserimento
TRUNCATE TABLE LargeTable
INSERT INTO LargeTable
SELECT *
FROM viewLargeView
WITH (HOLDLOCK)
Vorrei chiudere questa tabella quando si inserisce quindi se qualcuno cerca di selezionare un record non riceveranno nessuno dopo il troncamento. Il blocco che sto usando sembra bloccare la vista e non il tavolo.
C'è un modo migliore per affrontare questo problema?
Che dire di aprire una transazione prima dell'inserto e chiuderla dopo? –
Quando si apre una transazione, un altro utente può selezionare dalla tabella? – JBone
FYI, ti consigliamo di utilizzare DELETE anziché TRUNCATE, poiché TRUNCATE è un DDL, anziché un DML come DELETE e pertanto richiede autorizzazioni maggiori. Inoltre, se lo completi in una Transazione (che è la risposta corretta alla tua domanda), eseguiranno effettivamente lo stesso. – RBarryYoung