我正在与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
不是交换。源分区被移动到到目标分区,因此源分区变为空。空目标需求确保现有数据不会意外丢失。
无特殊原因;它碰巧就是这样设计的。范例案例是滚动窗口分区,它只需要从表中删除一个分区,而不需要用另一个分区替换它。