一尘不染

插入时锁定表

sql

我有一张大桌子,它从视图中填充。这样做是因为视图需要很长时间才能运行,并且更容易在表中轻松获得数据。经常运行一个过程以更新表。

 TRUNCATE TABLE LargeTable

 INSERT INTO LargeTable
 SELECT * 
 FROM viewLargeView
 WITH (HOLDLOCK)

我想在插入时锁定此表,因此,如果有人尝试选择一条记录,则截断后他们将不会再收到任何记录。我正在使用的锁似乎是锁定视图而不是表。

有没有更好的方法来解决此问题?


阅读 115

收藏
2021-03-17

共1个答案

一尘不染

BEGIN TRY
 BEGIN TRANSACTION t_Transaction

 TRUNCATE TABLE LargeTable

 INSERT INTO LargeTable
 SELECT * 
 FROM viewLargeView
  WITH (HOLDLOCK)

 COMMIT TRANSACTION t_Transaction
END TRY 
BEGIN CATCH
  ROLLBACK TRANSACTION t_Transaction
END CATCH
2021-03-17