在SQL Server中批量插入大量数据的最快方法是使用Table-Valued Parameters (TVP)。TVP是一种用户定义的表类型,它允许将客户端应用程序中的多行数据作为一个参数传递给存储过程。这种方法可以显著提高插入大量数据时的性能。
以下是使用C#客户端批量插入数据的步骤:
CREATE TYPE dbo.MyDataTableType AS TABLE (
Column1 INT,
Column2 VARCHAR(50),
Column3 DATETIME
)
CREATE PROCEDURE dbo.BulkInsertData
@MyDataTableType dbo.MyDataTableType READONLY
AS
BEGIN
INSERT INTO MyTable (Column1, Column2, Column3)
SELECT Column1, Column2, Column3
FROM @MyDataTableType
END
using System;
using System.Data;
using System.Data.SqlClient;
class Program
{
static void Main(string[] args)
{
string connectionString = "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;";
// 创建表格数据
DataTable dataTable = new DataTable();
dataTable.Columns.Add("Column1", typeof(int));
dataTable.Columns.Add("Column2", typeof(string));
dataTable.Columns.Add("Column3", typeof(DateTime));
// 添加数据行
for (int i = 1; i <= 1000; i++)
{
DataRow dataRow = dataTable.NewRow();
dataRow["Column1"] = i;
dataRow["Column2"] = "Data " + i;
dataRow["Column3"] = DateTime.Now;
dataTable.Rows.Add(dataRow);
}
// 执行批量插入
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
using (SqlCommand command = new SqlCommand("dbo.BulkInsertData", connection))
{
command.CommandType = CommandType.StoredProcedure;
SqlParameter parameter = command.Parameters.AddWithValue("@MyDataTableType", dataTable);
parameter.SqlDbType = SqlDbType.Structured;
parameter.TypeName = "dbo.MyDataTableType";
command.ExecuteNonQuery();
}
}
}
}
这种方法可以显著提高插入大量数据时的性能,因为它减少了客户端和服务器之间的往返次数,并允许在一个事务中插入多行数据。
领取专属 10元无门槛券
手把手带您无忧上云