0

我们需要(每月一次)清除具有 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 ... 的解决方案,但我想我会根据情况求助于专业人士来引导我朝着正确的方向前进。

谢谢!

4

1 回答 1

1

我会使用可序列化的事务

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE

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

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

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

于 2013-09-30T13:22:34.907 回答