SQL Server 2008 R2 - 在清除和插入期间锁定表

时间:2013-09-30 13:11:16

标签: sql sql-server sql-server-2008 sql-server-2008-r2 locking

我们需要(每月一次)清除包含50,000条记录的表格内容,并使用存储过程重新填充。 SP具有“用户定义的表类型”参数,该参数包含要插入的所有新记录。

目前的想法如下

ALTER PROCEDURE [ProcName]
  @TableParm UserTableType READONLY
AS

[Set lock on table?]

BEGIN TRAN
  DELETE FROM [table]

  INSERT INTO [table](column, column, column)
  SELECT (a.column, a.column, a.column) FROM @TableParm a
COMMIT TRAN

[Remove lock from table?]

我已经阅读了一些建议设置READ COMMITED或READ UNCOMMITED的解决方案......但我认为我会转向专业人士,根据情况引导我朝着正确的方向前进。

谢谢!

1 个答案:

答案 0 :(得分:1)

我使用可序列化的交易

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE

READ...类型级别都允许从表中读取某些表单的数据,这可能不是您想要的。

您也可以使用TRUNCATE TABLE而不是DELETE,具体取决于您的数据结构。

如果减少此表的不可用性是一个问题,您可以通过创建一个新表,填充它,然后重命名旧表和新表来减少它。