用另一个快速替换T-SQL中的表

时间:2016-01-18 12:46:56

标签: sql-server tsql dynamic-sql

我有两个具有相同结构的表(键/列/等)。我想用第二个表中的数据替换第一个表中的数据。我使用以下代码来执行此操作:

DROP TABLE T1

SELECT *
INTO T1
FROM T2

DROP TABLE T2

但是当T2很大时,这段代码足够慢。 T2表是临时的,所以我想把它重写为:

drop table T1

EXEC sp_rename 'T2', 'T1'

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

1 个答案:

答案 0 :(得分:2)

重命名表应该没问题。有时,触发器或外键约束(等等)可能存在问题。但是,无论如何,你都在放弃T1,所以这不是一个问题。

一个问题是数据实际存储的位置。如果通过临时表,您的意思是以#开头的表名,那么这不是一个好方法,因为临时表通常与其他表分开存储。相反,在存储T1的同一位置创建表,也许称之为temp_T1

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

相关问题