当进行分区切换(SWITCH..TO)时-为什么接收分区需要为空?



我正在与SWITCH...TO胡闹,作为做TRUNCATE的"良好实践"方式;重建表。

INSERT INTO stg.MyTable SELECT * FROM CTE_Final
SET XACT_ABORT, NOCOUNT ON
BEGIN TRANSACTION;
*TRUNCATE TABLE dbo.MyTable*
ALTER TABLE stg.MyTable
SWITCH TO dbo.MyTable
COMMIT TRANSACTION;

根据Microsoft,在进行分区切换时,目标分区必须为空。

SQL Server 2008R2 -使用分区交换高效传输数据

为什么?

我将此概念化为最初指向stg.MyTable的东西,现在指向dbo.MyTable,反之亦然。我认为这是完全错误的,因为我不明白为什么"开关"会要求"目的地"表为空。甚至当它们都在切换时,为什么一个表被称为目的地。

SWITCH不是交换。源分区被移动到到目标分区,因此源分区变为空。空目标需求确保现有数据不会意外丢失。

无特殊原因;它碰巧就是这样设计的。范例案例是滚动窗口分区,它只需要从表中删除一个分区,而不需要用另一个分区替换它。

相关内容

  • 没有找到相关文章

最新更新