我有两个具有相同结构的表(键/列/等)。我想用第二个表中的数据替换第一个表中的数据。我使用以下代码来执行此操作:
DROP TABLE T1
SELECT *
INTO T1
FROM T2
DROP TABLE T2
但是当T2很大时,这段代码足够慢。 T2表是临时的,所以我想把它重写为:
drop table T1
EXEC sp_rename 'T2', 'T1'
这应该对任何大小的表执行得非常快,但我在这里遗漏了什么吗?可能会破坏此代码的一些副作用?我对动态SQL不是很熟悉所以请建议。
答案 0 :(得分:2)
重命名表应该没问题。有时,触发器或外键约束(等等)可能存在问题。但是,无论如何,你都在放弃T1
,所以这不是一个问题。
一个问题是数据实际存储的位置。如果通过临时表,您的意思是以#
开头的表名,那么这不是一个好方法,因为临时表通常与其他表分开存储。相反,在存储T1
的同一位置创建表,也许称之为temp_T1
。
你可能想重新审视你的逻辑,看看是否有办法重建" T1到位。但是,当处理中有大量更新和删除时,重新创建表通常是最快的方法。