在没有集成服务的情况下,将文本文件大容量插入sql server的最快方法



我有以下要求

客户会把一个文件放在一个价值600MB大小的文件夹上,我需要使用Windows服务来轮询文件夹,一旦有新文件放在那里,我就需要处理它并插入SQL Server。

建议最快的方式是什么?ADO.NET每行插入一个?你给我推荐什么?

使用SQL server的大容量插入功能。

请参阅https://blogs.msdn.microsoft.com/nikhilsi/2008/06/11/bulk-insert-into-sql-from-c-app/

我建议使用ADO.NET,但不要每行插入。如果一个文本文件中有600MB的行,这可能会非常费力。相反,创建一个用户定义的表格类型

CREATE TYPE [dbo].[MyTable] AS TABLE
(
    [Col1] INT NOT NULL,
    [Col2] NVARCHAR(10) NOT NULL,
    [Col3] NVARCHAR(250) NOT NULL
)

然后在C#中创建一个数据表。

var dt = new DataTable("MyTable");
dt.Columns.Add("Col1", typeof(int));
dt.Columns.Add("Col2", typeof(string));
dt.Columns.Add("Col3", typeof(string));

使用此语法加载它。

dt.Rows.Add(someVar1, someVar2, someVar3);

分批加载数据表,然后像其他任何参数一样将数据表作为参数提交给SQL。

command.Parameters.Add(new SqlParameter { ParameterName = "Values", Value = dt });

您的存储过程应该需要参数。

CREATE PROCEDURE [ive].[myProc]
@Values [dbo].[MyTable] READONLY

然后,只需在存储过程中像表一样使用它。您可以将流程封装在事务中,以防大容量插入在任何步骤都失败,并使用一些其他逻辑来纠正问题。

最新更新