【问题标题】:Bulk Insert/Update into SQL Server database using .net使用 .net 批量插入/更新到 SQL Server 数据库
【发布时间】:2014-03-18 09:20:09
【问题描述】:

我想使用 .net 将超过 25000 行数据批量插入(或更新,如果记录存在)到 SQL Server 数据库中。哪种方法最适合我?

例如:
如果我将数据发送到数据库,它应该插入/更新这些记录。

【问题讨论】:

  • 使用 DataAdapters 执行批处理操作 - msdn.microsoft.com/en-us/library/aadf8fk2%28v=vs.110%29.aspx
  • 批量操作不支持检查现有行。您应该做的是 (1) 将您的行批量插入到临时表中 - 所有这些行,然后 (2) 将该临时表与您拥有的真实表进行比较并插入新行,更新现有行。批量操作就是这样做的——批量加载数据,不检查、不比较、不进行其他操作——但它的速度非常快。
  • SQL server 版本:从SQL Server 2008开始,现在可以使用MERGE SQL命令;因此您可以使用 SqlBulkCopy 批量加载到暂存中,然后在合并后有效地插入/更新。不要为此使用 linq-to-sql,因为它在基于批处理的操作上非常缓慢

标签: c# .net sql-server linq linq-to-sql


【解决方案1】:

我认为你需要 SqlBulkCopy 类。

bulkCopy.WriteToServer(dataTable);//Store your data into dataTable

【讨论】:

  • 这是第一步:使用 SqlBulkCopy 插入临时表。第二步是使用“Merge”语句来合并数据。
【解决方案2】:

您可以使用 XML 更新方法。以 XML 格式向数据库传递数据`

CREATE  procedure [dbo].[BulkInsertion]    
@xmlData NTEXT,  
@Type INT              
AS              
BEGIN              
DECLARE @idoc INT                  
EXEC SP_XML_PREPAREDOCUMENT @idoc OUTPUT, @xmlData                 
IF @Type=1    
BEGIN    
INSERT INTO TableName              
Column1, Column2, Column3
)           
SELECT Column1, Column2, Column3
)
END AS DOLP  
FROM OPENXML (@idoc, '//Table1', 3)                      
WITH    (Column1 INT, Column2 VARCHAR(250), Column3 VARCHAR(250))  
END            
EXEC SP_XML_REMOVEDOCUMENT @idoc    
END'

【讨论】:

  • 如果这不是批量插入..那么请告诉上面的sn-p是什么意思
  • 你为什么要以这种方式对行进行 C# bulkinsert,而你的答案也没有解决合并问题。
  • 使用 xml 是进行基于集合的操作的一种合法选择。您将 Xml 向下推。撕碎它。并基于唯一约束执行插入/更新(或连接合并)。我赞成这个,因为有人反对它。 Kalias,您使用的是 Sql Server 2000 OPENXML 语法,它(虽然向后兼容).. 不是 2005 年及以后的最新方法。我会用谷歌搜索“Plamen Shred Xml”以获得更新的 .nodes 方法。
  • 感谢granadacoder 分享信息。我已成功使用 OPENXML 进行更新,这就是我分享它的原因。哪种方法是最新的?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-16
  • 2014-08-30
  • 1970-01-01
相关资源
最近更新 更多