如何使此 SQL TRUNCATE 更安全?

问题描述

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

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

像这样:

SELECT * INTO tmp FROM source

TRUNCATE TABLE source

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

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

有什么流程可以确保没有数据丢失吗?

我曾考虑将最新的主键存储在一个变量中,然后在 SELECT * INTO 后面加上另一个,只取主键高于该值的行,我认为这样复制速度会更快。这个假设正确吗?

另一种选择是简单地手动运行一个脚本,该脚本缓慢但肯定地只是DELETEs我们不需要的行。虽然这个过程会随着行被删除而加快,但我想不出办法让它更快。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...