我有时在 SQL Server 2008 上使用 switch table 在 2 个表之间快速传输数据,但我不知道它是如何工作的,以及这与只是一个
insert into T2 select * from T1
有什么区别。
有人可以详细解释一下它的工作原理和区别吗?
此外,我注意到,如果两个表都不是克隆,则此语句不起作用。例如,如果我在一个表中有一个索引,而在另一个表中没有,则会失败。
使用语句插入数据
insert into T2 select * from T1
通过将 T1 中的数据插入到 T2 中来加载数据。 当分区转移(切换)时,数据并没有物理移动;仅有关数据位置的元数据发生变化。
在切换分区之前,必须满足几个一般要求:
切换分区的一般要求:
分区转移时,数据并没有物理移动;仅有关数据位置的元数据发生变化。在切换分区之前,必须满足几个一般要求:
此信息及更多信息位于此处:
https://technet.microsoft.com/en-us/library/ms191160(v=sql.105).aspx
BEGIN TRANSACTION:这将启动一个事务,允许您将多个操作捆绑到一个原子操作中,该操作可以整体成功,也可以在出现错误时回滚。
ALTER TABLE dbo.OriginalTable SWITCH TO dbo.OriginalTable_Shadow:此命令将数据从 SQL Server 中的 dbo.OriginalTable 移动到 dbo.OriginalTable_Shadow,而无需物理复制数据。相反,它只是更新元数据中的指针。它通常用于分区切换或使数据归档操作更高效。
提交事务:如果一切执行成功,则事务提交,使所有更改永久化。
重要注意事项 约束:源表和目标表必须具有相同的结构,包括索引和约束。 清空目标表:切换前 dbo.OriginalTable_Shadow 必须为空。 恢复模型:确保您的 SQL Server 恢复模型和索引策略按预期支持 SWITCH 操作,特别是当您将其用于归档或分区时。 如果失败时需要回滚,可以添加错误处理来检查事务期间是否存在异常,并在必要时使用 ROLLBACK TRANSACTION。