Mam dużą tabelę, która zostanie wypełniona z widoku. Dzieje się tak, ponieważ przeglądanie zajmuje dużo czasu i łatwiej jest udostępnić dane w tabeli. Procedura jest uruchamiana tak często, że aktualizuje tabelę.Zablokuj tabelę podczas wstawiania
TRUNCATE TABLE LargeTable
INSERT INTO LargeTable
SELECT *
FROM viewLargeView
WITH (HOLDLOCK)
Chciałbym zablokować tę tabelę przy wkładaniu więc jeśli ktoś próbuje wybrać rekord nie otrzyma żadnej po skróconej. Blokada, której używam, wydaje się blokować widok, a nie tabelę.
Czy istnieje lepszy sposób rozwiązania tego problemu?
Co powiesz na otwarcie transakcji przed wstawieniem i zamknięciem po? –
Czy podczas otwierania transakcji inny użytkownik może wybrać z tabeli? – JBone
FYI, polecam używać DELETE zamiast TRUNCATE, ponieważ TRUNCATE jest DDL, zamiast DML jak DELETE, a więc wymaga większych uprawnień. Dodatkowo, jeśli zawiniesz to w Transakcji (która jest poprawną odpowiedzią na twoje pytanie), skutecznie wykonają to samo. – RBarryYoung