在 MS SQL 2012 数据库中,如何分块插入非常大的表数据

在 MS SQL 2012 数据库中,如何分块插入非常大的表数据

我需要通过将数据移动到新表来存档 SQL Server 2012 中的大量信息,但不阻止其他用户使用原始表。使用 T-SQL 循环语句执行此操作是最好的方法吗?还是有更好的方法?

答案1

如何按照你要求的方式去做:

创建第二个表,与第一个表完全相同。

找到一个列(可能是基于日期的列?),然后使用它来将合理数量的数据复制到第二个表中。(“合理”是一个基于数据大小和所需时间的任意值。)然后运行第二个查询以从第一个表中删除相同的数据。请注意,第二个查询是阻塞查询,这意味着它将阻止任何人使用该表。换句话说,第二个查询是问题所在,而不是第一个查询。

我最终做的是:

  1. 创建临时表(id intidentity,第二列以第一个表的PK命名,并且具有相同或兼容的数据类型)。
  2. 选择主键,其中日期介于(范围)之间,放入临时表中
  3. 循环遍历临时表(选择自动编号,从第一个表中删除 PK = 临时表中的 PK)。

这比正常删除花费的时间更长,但不会阻塞。

我建议这样做:

这就是我要开始做的事情:

  1. 创建新表,为空但其他方面与旧表完全相同。
  2. 创建作业以重命名旧表(从 data 到 data-201412)并使用旧名称重命名新表(从 data-new 到 data)。
  3. 安排它在我参加新年晚会时运行。

(实际上,我即将拥有一个全新的数据库,但已经足够接近了。)

相关内容