我们有一个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
我们不需要的行。虽然这个过程会随着行的删除而加快,但我想不出一种方法来加快速度。