0

我们有一个Azure SQL数据库表,其中包含数百万行的空间不足。已选择删除一些内容,我的任务是编写此脚本。

我选择的过程是将我们想要保留的数据(相对少量,但仍然是 100 行中的 1000 行)复制到临时表,truncate主表中,然后将临时表内容重新插入到主表中桌子。

像这样的东西:

SELECT * INTO tmp FROM source

TRUNCATE TABLE source

INSERT INTO source (<fields>) SELECT <fields> FROM tmp

但是,我想确保我们source在可能很长的时间不会丢失插入到表中的数据SELECT * INTO

有没有我可以用来确保没有数据丢失的过程?

我考虑过将最近的主键存储在一个变量中,然后再SELECT * INTO使用另一个,只取主键高于该值的行,我相信这将是一个更快的副本。这个假设正确吗?

另一种选择是简单地手动运行一个脚本,该脚本缓慢但绝对是DELETEs我们不需要的行。虽然这个过程会随着行的删除而加快,但我想不出一种方法来加快速度。

4

0 回答 0