【问题标题】:T-sql insert large amount data problemt-sql插入大量数据问题
【发布时间】:2010-11-08 12:47:58
【问题描述】:

这是我的困境,

8 表

最多 72 列

包括数据类型 int、smallint、decimal 、smalldatetime、char

那里没什么可怕的。

我创建了 100 行、1000 行、10000 行、50000 行、100000 行、500000 行的唯一数据集,但它们在插入语句中。这是用于体积测试。

当尝试运行 50K 查询时,sql server 内存不足。

我有什么选择。!我需要打破小查询吗?我可以提交每 X 行吗?如何确定最大行是否有比插入语句更好的方法>? Excel 和访问排除了应有的数据量。

有没有一个示例循环 t-sql 语句来创建不同类型的数据?

【问题讨论】:

  • 这就是Bulk Insert 存在的原因。没有回答,因为我找不到任何将 DataSet 操作转换为批量插入作业的示例。
  • 这不是你问题的真正答案,但 Redgate 有一个方便的小工具来做这种事情:red-gate.com/products/SQL_Data_Generator
  • 您使用的是什么版本的 SQL Server?
  • 如果您发布了正在破坏的代码,这将真正有助于理解您的问题。 SQL Server 在 50K 行插入时内存不足实际上是非常令人惊讶的。
  • 谢谢 Will,我将研究批量插入,就像一个吃甜甜圈的胖孩子一样,我几乎没有 T-SQL 经验 Oracle 通常是我选择的毒药。

标签: sql sql-server database tsql


【解决方案1】:

使用“GO”关键字拆分部分插入语句。它将结束一批并开始另一批。为了方便测试生成,用“GO”分割每一行是正常的。

insert into XXX (1, 2, 3, ...)
...
insert into XXX (2, 3, 4, ...)
GO
insert into XXX (3, 4, 5, ...)
...
insert into XXX (4, 5, 6, ...)
GO

insert into XXX (1, 2, 3, ...)
GO
insert into XXX (2, 3, 4, ...)
GO
insert into XXX (3, 4, 5, ...)
GO

【讨论】:

  • 虽然这是正确的,但您可能希望从每批 500 条语句开始(批处理是 GO 之前的一组语句)。
  • 无法执行脚本。 =================================== 内存不足,无法继续执行程序。 (mscorlib)
【解决方案2】:

BULK INSERT 正是针对这种场景 - 将大量数据加载到 SQL 服务器中。为什么它比 normaln 插入更高效、更快?因为 B-Tree 是自下而上构建的,而不是普通的自上而下的插入和拆分方法。

【讨论】:

    【解决方案3】:

    “有没有一个示例循环 t-sql 语句来创建不同类型的数据?”

    循环也可用。

    declare @i int
    set @i = 0
    while @i<50000
    begin
      set @i = @i+1
      insert into XXX (@i, 1, 2, 3)
    end
    

    【讨论】:

    • 这没有帮助,而且实践不佳。
    • 如果提交发生在每个循环完成 (50000) 之后,那么您运行另一个循环 - 这不是解决 OP 问题吗?
    • Aaaa... 可能。 :) 原始帖子包含两个问题,因此这里有两个答案。据我了解,关于循环的问题是一个独立的问题......
    • @Badiboy 和 Randy - 提供或鼓励全球公认的不良做法作为解决方案(SQL 中的过程逻辑),但我没有注意到这是我发表评论的原因。
    【解决方案4】:

    由于您使用的是 .NET 框架,您可能应该查看数据适配器上的 updateBatchSize 参数。它会为你处理很多内部问题。更多信息@msdn.microsoft.com/en-us/library/kbbwt18a(VS.80).aspx

    【讨论】:

      【解决方案5】:

      使用 SSIS,在 DataFlowTask 中它可以选择指定批量大小。

      【讨论】:

        猜你喜欢
        • 2011-03-10
        • 2012-09-13
        • 2011-06-20
        • 2014-01-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多