快速将 T-SQL 中的 table 替换为另一个

Fast replace table in T-SQL with another

我有两个具有相同结构 (keys/columns/etc) 的 table。我想用第二个数据替换第一个 table 中的数据。我使用以下代码来做到这一点:

DROP TABLE T1

SELECT *
INTO T1
FROM T2

DROP TABLE T2

但是当 T2 很大时,这段代码已经够慢了。 T2 table 是临时的,所以我想将其重写为:

drop table T1

EXEC sp_rename 'T2', 'T1'

对于任何大小,这都应该执行得非常快 table,但是我在这里遗漏了什么吗?可能会破坏此代码的一些副作用?我对动态不是很熟悉SQL所以请指教。

重命名 table 应该没问题。有时,触发器或外键约束(等)可能会出现问题。但是,无论如何您都会丢弃 T1,所以这不是问题。

一个问题是数据的实际存储位置。如果临时 table 是指以 # 开头的 table 名称,那么这不是一个好方法,因为临时 table 通常与其他 [=分开存储=21=]s。相反,在存储 T1 的相同位置创建 table,也许将其命名为 temp_T1.

您可能想重新审视您的逻辑,看看是否有办法 "reconstruct" T1 到位。但是,当处理中有大量更新和删除时,重新创建 table 通常是最快的方法。