如何将现有表中的 7000 条记录中的前 1000 条记录复制到其他新表中

Posted

技术标签:

【中文标题】如何将现有表中的 7000 条记录中的前 1000 条记录复制到其他新表中【英文标题】:how to copy top 1000 records from 7000 records in existing table to other new table 【发布时间】:2013-06-09 22:47:12 【问题描述】:

我有一个包含超过 7k 条记录的表 A,现在我正在创建一个新表 B。在我的新表 B 中,我只需要从包含 7000 多条记录的表 A 中复制 1000 条记录。

没有条件适用,可能是 7000 中的任何一千条记录。

【问题讨论】:

【参考方案1】:
INSERT INTO TABLEB(Col1, Col2, .... colN)
    SELECT TOP 1000 Col1, Col2, .... colN FROM TABLEA

【讨论】:

如果您没有明确指定ORDER BY - 您将获得哪些行? SQL Server 表中没有隐式排序... 我没有使用任何 order bys,因为问题明确指出 ANY 1000 行。理想情况下,您希望根据业务案例获得感兴趣的行,这在此上下文中显然不可用。【参考方案2】:

在 SQL Server 中

SELECT top 1000 *
INTO newTableName
FROM oldTableName;

mysql

SELECT *
INTO newTableName
FROM oldTableName Limit 1000;

【讨论】:

如果您没有明确指定ORDER BY - 您将获得哪些行? SQL Server 或 MySQL 表中没有 隐式 排序... 是的,你是对的,实际上在 sql server 和 mysql 中都没有隐式排序,他的问题与排序的行无关,他只想移动 1000 行而不管排序。【参考方案3】:

您可以在公用表表达式中使用ROW_NUMBER

WITH CTE AS(
   SELECT Col1, Col2, Col3, RN = ROW_NUMBER() OVER (ORDER BY Col1)
   FROM dbo.TableA
)
INSERT INTO dbo.TableB(Col1, Col2, Col3)
    SELECT Col1, Col2, Col3
    FROM CTE
    WHERE RN <= 1000

然后很容易更改应该导出的逻辑。您可以更改ORDER BY,应用PARTITION BY(例如复制重复项),使用多个ORDER BY 逗号分隔或更改要导出的数字。

【讨论】:

以上是关于如何将现有表中的 7000 条记录中的前 1000 条记录复制到其他新表中的主要内容,如果未能解决你的问题,请参考以下文章

如何从雪花数据库中的表中删除前 N 条记录

请教大虾们,反复执行同一个游标(cursor),每次从表中取出1000条,直到将表中的数据取完;

假设一个表中有多个列有 1000 条记录,如何在整个表中查找重复记录? [复制]

如何从 Oracle PL/SQL 函数中返回现有表中的记录?

如何从mysql中的表中选择N条记录

SQL Server CE性能,从表中选择7000条记录需要8s