【问题标题】:SQL Server replication drop vs truncate of target tablesSQL Server 复制删除与目标表截断
【发布时间】:2011-03-22 17:58:48
【问题描述】:

用于在 SQL Server 中创建发布文章的 sp_addarticle 存储过程有一个参数@pre_creation_cmd,通过该参数可以为快照指定在目标服务器上删除表或截断数据。各自适合什么情况?

【问题讨论】:

    标签: sql-server snapshot database-replication


    【解决方案1】:

    @pre_creation_cmd 接受以下四个值之一:

    • 删除
    • 丢弃
    • 截断

    删除表格

    假设您已发表的文章 数据被过滤,并且 对应表中 订阅从其他接收数据 来源,也许是另一个出版物 例如。使用删除 此参数的操作将 “只”删除符合条件的数据 过滤器定义的标准, 将剩余数据留在 订阅者完好无损。

    截断表格

    从表中删除所有行 记录单个行删除。 TRUNCATE TABLE 类似于 没有 WHERE 子句的 DELETE 语句; 但是,TRUNCATE TABLE 更快并且 使用更少的系统和事务日志 资源。

    删除表格

    删除一个或多个表定义 以及所有数据、索引、触发器, 约束和许可 这些表的规格。

    【讨论】:

    • 谢谢约翰,什么情况下会使一个选项比另一种更可取?假设存在实际差异,这就是我问的原因。
    • 例如,TRUNCATE 被认为是比 DELETE 更好的执行操作。您也不能对具有外键引用的表执行 TRUNCATE 操作。相反,DELETE 和 TRUNCATE 都不会删除与表关联的对象,例如 DROP 操作会执行的索引。
    • 如果我在复制方面理解正确,如果一个表没有外键引用,请使用 TRUNCATE,因为它的性能要好得多。否则,我们会删除数据并忍受性能下降的情况。谢谢。
    • 我建议您使用复制默认值 DROP,除非您有特殊需要。
    • 'NONE' 呢?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-08
    • 1970-01-01
    • 2014-05-25
    • 2015-01-26
    • 2010-12-18
    • 1970-01-01
    相关资源
    最近更新 更多