如何高效实现批量插入数据,并去重

如何高效实现批量插入数据,并去重,第1张

c#,sqlserver。写一下我将前端获取到的缓存数据批量插入数据库的表。

在sqlserver数据库下,展开(可编程性)-->(类型)-->(用户自定义表类型)。建一个自定义表类型,表类型结构即是前端传过来的表格数据结构。例如:

CREATE TYPE [dbo][DT_SAP_ASN] AS TABLE(

[GUID] [nvarchar](50) NULL,

[VBELN_SIP] [nvarchar](30) NULL,

[POSNR_SIP] [nvarchar](30) NULL

)

GO

然后再写个存储,用于调用此存储批量将前端传入的datatable缓存数据批量插入数据库的某个表。例如:

CREATE PROC [dbo][SP_EDI_SAP_ASN]

(

@DT_SAP_ASN DT_SAP_ASN READONLY --输入参数,刚刚自定义的表类型

)

AS

BEGIN

SET NOCOUNT OFF

INSERT INTO dboEDI_ASN_Log

( ID ,

GUID ,

VBELN_SIP ,

POSNR_SIP ,

)

SELECT NEWID() ,

GUID ,

VBELN_SIP ,

POSNR_SIP

FROM @DT_SAP_ASN

SET NOCOUNT ON

END

当然,去重的话在inset那边select表#DT_SAP_ASN distinct一下即可

SqlBulkCopy是个不错的选择,直接由DataTable可以导入到数据库,但要注意(1)列名与目标表一致(2)数据类型一致(3)空值容错处理,参考代码:///<summary///将<see cref="DataTable"/

的数据批量插入到数据库中。///</summary///<param name="dataTable"

要批量插入的

<see cref="DataTable"/。

</param///<param name="batchSize"

每批次写入的数据量。

</parampublicboolInsertBatchDataTable(DataTable dataTable,

stringtableName,

intbatchSize =10000){using(SqlConnection connection =newSqlConnection(myConnectionString)){try{connectionOpen();//给表名加上前后导符using(varbulk =newSqlBulkCopy(connection, SqlBulkCopyOptionsKeepIdentity,

null){DestinationTableName=tableName,

BatchSize=batchSize}){//循环所有列,为bulk添加映射//dataTableEachColumn(c = bulkColumnMappingsAdd(cColumnName, cColumnName), c = !cAutoIncrement);foreach(DataColumn dcindataTableColumns){bulkColumnMappingsAdd(dcColumnName, dcColumnName);}bulkWriteToServer(dataTable);

bulkClose();}returntrue;}catch(Exception exp){returnfalse;}finally{connectionClose();}}}

如果是数据量非常大,超过10W以上的数据,可以考虑生成dtsx文件,然后由C#代码直接调用,效率还是不错的。

以上就是关于如何高效实现批量插入数据,并去重全部的内容,包括:如何高效实现批量插入数据,并去重、如何高效地批量导入数据到SqlServer、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10187591.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存