【问题标题】:SQL Server - Insert 2M+ records in SQL script with 7000 rows per insertSQL Server - 在 SQL 脚本中插入 2M+ 条记录,每次插入 7000 行
【发布时间】:2019-04-25 00:50:38
【问题描述】:

我正在寻找有关 SQL Server 中每个插入限制为 1000 行的解决方法的任何建议。

我有一个只有 100 行的 MySQL 转储脚本,每行是一个包含大约 7000 行的插入语句。

由于每次插入 1000 行的限制,我无法将其直接插入 SQL Server。

是否有任何“简单”的解决方法或只有一种方法是以编程方式识别行并为每行创建插入?

【问题讨论】:

  • 你能提供更多的背景信息吗?就像您正在使用的各种数据的示例一样。 “有问题地识别行”可能意味着很多事情。
  • 有几个选项取决于您想要获得的创意。你知道任何编程语言吗?您可以使用 Python 或 PowerShell 来遍历各种插入语句并以这种方式以编程方式控制批处理和事务,或者您可以使用 SSIS(SQL Server 集成服务)或使用 BULK INSERT 和批处理脚本执行某些操作。我的第一个想法是编写一个程序来执行此操作。
  • 是的 @tadman 说过 - 请提供数据样本或一些准确表示它的虚拟数据。有多少列?
  • 请注意,如果您使用mysqldump,您可以调整--max-allowed-packet 参数以使您的批量插入更小,或者关闭--extended-insert,如果这会造成问题。

标签: sql sql-server


【解决方案1】:

要正确回答您的问题,完全按照所要求的那样,不,在 SQL 界面中本机没有办法克服 INSERT 限制。您将需要创建一个程序化解决方案。我在评论中列出了一些技术,例如 Python、PowerShell 和 .NET。您可以将解决方案与 BCP、BULK INSERT、SSIS 或其他一些 BI 工具粘贴在一起。以下是一些关于批量插入大型数据集的 C# 链接:

Insert 2 million rows into SQL Server quickly

Bulk inserting with SQL Server (C#)

还有一个类似的问题,这里接受的答案建议使用 SQL Server 导入向导:

Import Wizard - Bulk Insert

【讨论】:

    【解决方案2】:

    您可以尝试UNION ALL SELECT 技巧进行插入,因为它只有 7000 行,不会出现性能问题。

    INSERT INTO Table1 (ValueA, ValueB)
    SELECT 1, 2
    UNION ALL SELECT 3,4
    UNION ALL SELECT 5,6;
    

    通过这种方式,您将没有 VALUES 子句的 1000 行限制。

    Stackoverflow post 中提到了另一种方法,其中每个 INSERT 语句都有 INSERT INTO TABLE

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-17
      • 1970-01-01
      • 1970-01-01
      • 2011-05-09
      • 2016-03-07
      • 1970-01-01
      • 1970-01-01
      • 2015-07-14
      相关资源
      最近更新 更多