【问题标题】:insert into <archiveTable> using top in while loop在 while 循环中使用 top 插入 <archiveTable>
【发布时间】:2010-09-17 20:52:23
【问题描述】:

我需要使用 SQL 语句将 Order 表归档到 OrderArchive 表

订单表有 10,000 条记录。

我需要在 while 循环中从 Order 插入 OrderArchive 表,其中前 1000 行。

如何在 SQL Server 中实现这一点

谢谢。

【问题讨论】:

  • 1.为什么要对这么少的记录使用 while 循环? 2. 您是否需要从 Order 中删除并插入到 OrderArchive 以进行归档过程?
  • 仅样本中的记录数。是的,我需要从 Order 中删除并插入 OrderArchive
  • 为了拯救其他人在谷歌上搜索“十万或拉克是印度编号系统中的一个单位,等于十万”
  • @Martin Smith 高五!
  • @Sujith - 你使用的是什么版本的 SQL Server?如果 SQL Server 2005+,您可以使用删除 Order 上的 OUTPUT 子句插入 OrderArchive。

标签: sql-server


【解决方案1】:
while 1=1
begin

insert into OrderArchive
select top 1000 * from Order o
where not exists (select top 1 1 from OrderArchive oa where oa.id = o.id)

if @@rowcount = 0 
break;

end

如果你想删除并插入已删除的行到存档中,有一个更好的解决方案:

delete o
output deleted.* into OrderArchive
from Order o
where o.ToDelete = 1

【讨论】:

    猜你喜欢
    • 2015-01-14
    • 2022-01-07
    • 1970-01-01
    • 2021-06-03
    • 1970-01-01
    • 2015-12-22
    • 2017-10-17
    • 2020-05-17
    • 1970-01-01
    相关资源
    最近更新 更多