【问题标题】:SQL Sever 2008 R2 - Lock table during clear and insertSQL Server 2008 R2 - 在清除和插入期间锁定表
【发布时间】:2013-09-30 13:11:16
【问题描述】:

我们需要(每月一次)清除包含 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...

谢谢!

【问题讨论】:

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


    【解决方案1】:

    我会使用可序列化的事务

    SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
    

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

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

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

    【讨论】:

    • 谢谢。我们不太关心可用性,运行它应该不到一秒钟。我将尝试 Serializable 命令,如果它有效,请标记此答案。
    猜你喜欢
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多