您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

使用记录ID列表作为输入来更新SQL Server中的400万条记录

使用记录ID列表作为输入来更新SQL Server中的400万条记录

解决此问题的最佳方法是将400万条记录插入表中。实际上,您可以通过在视图中“批量插入”将它们放入带有标识列的表中。

create table TheIds (rownum int identity(1,1), id int);

create view v_TheIds (select id from TheIds);

bulk insert into v_TheIds . . .

有了数据库中的所有数据,您现在有了更多选择。尝试更新:

update t
    set booleanfield = 1
    where exists (select 1 from TheIds where TheIds.id = t.id)

您还应该在上创建索引TheIds(id)

这是一个很大的更新,全部作为一个事务执行。这可能会影响性能,并开始填充日志。您可以使用以下列将其分解为较小的交易rownum

update t
    set booleanfield = 1
    where exists (select 1 from TheIds where TheIds.id = t.id and TheIds.rownum < 1000)

这里的exist子句的作用等同于left outer join。主要区别在于,这种相关的子查询语法应在其他数据库中工作,这些数据库中的更新联接是特定于数据库的。

使用该rownum列,您可以选择要更新的任意多行。因此,如果整体更新太大,则可以将更新放入循环中:

where rownum < 100000
where rownum between 100000 and 199999
where rownum between 200000 and 299999

等等。您不必执行此操作,但是如果出于某种原因要批处理更新,则可以这样做。

关键思想是将ID列表放入数据库的表中,以便可以将数据库功能用于后续操作。

SQLServer 2022/1/1 18:52:35 有363人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶