【问题标题】:How to send large amount of Data To SqlServer Stored Procedure如何将大量数据发送到 Sql Server 存储过程
【发布时间】:2015-11-26 10:55:21
【问题描述】:

我想将大量数据从基于 .Net 的应用程序发送到 SQL Server。此数据记录来自 CSV 文件,应通过 SQL Server 端的存储过程汇集。我知道 SqlBulkCopy 但 SqlBulklCopy 直接写入表。意味着,它对我不可用。我说的是超过 100.000.000 条记录。我将无法在内存中保存这么多数据。所以理想情况下,我问是否存在从.Net 到存储过程的某种流数据。我很感激任何帮助。

【问题讨论】:

  • 寻找DataTableuser defined table types
  • 为什么不将数据分割成更小的部分并按顺序导入呢?这也将允许您在前端获得一些进度反馈。
  • 你考虑过 Sql Server 集成服务吗?
  • 描述问题而不是解决方案。您出于未知原因排除了批量复制,出于未知原因不愿意使用(临时?)表。如果不将 100M 行存储在表中,您将如何处理它们?
  • @GiorgiNakeuri 出于不同的原因我们不想使用 SSIS。

标签: c# .net sql-server stored-procedures sqlbulkcopy


【解决方案1】:

我认为您正在寻找Table-Valued Parameters。有足够的文档如何在数据库中创建 TVP 类型并在存储过程中使用它。在设置SqlParameter 时,您可以提供IEnumerable<SqlDataRecord>,它可以通过C# 迭代器函数轻松提供,直接逐个读取顺序的CSV 文件数据记录,并为每条记录解析、转换并生成相应的SqlDataRecord。在 Sql Server 端,数据仍会在传递给存储过程之前批量插入到 tempdb 中,但至少在客户端,您不需要内存来保存所有数据。

【讨论】:

  • 看起来这是不使用 BulkCopy 的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多