我有一張從視圖中填充的大表格。這樣做是因爲視圖需要很長時間才能運行,並且數據很容易在表中使用。每隔一段時間運行一次程序以更新表格。插入時鎖定表格
TRUNCATE TABLE LargeTable
INSERT INTO LargeTable
SELECT *
FROM viewLargeView
WITH (HOLDLOCK)
我想在插入時鎖定此表,所以如果有人試圖選擇一條記錄,截斷後他們將不會收到任何記錄。我正在使用的鎖似乎鎖定了視圖而不是表格。
有沒有更好的方法來解決這個問題?
在插入和關閉之後打開一個事務怎麼樣? – 2012-03-23 15:51:33
當打開一個事務時,另一個用戶可以從表中選擇? – JBone 2012-03-23 15:57:07
僅供參考,我建議您使用DELETE而不是TRUNCATE,因爲TRUNCATE是DDL,而不是像DELETE這樣的DML,因此需要更大的權限。另外,如果你在交易中(這是你的問題的正確答案)包裝這些,他們將有效地執行相同的操作。 – RBarryYoung 2012-03-23 16:02:34