SQL 中三种批量插入数据的方法 在实际开发中,批量插入数据是非常常见的操作,对于大规模数据的插入,通常需要高效的方法来实现。本文将介绍三种批量插入数据的方法,分别是使用循环语句逐个插入、使用 SqlBulkCopy 和使用表值参数。 第一种方法:使用循环语句逐个插入 这种方法是最简单的批量插入方法,即使用循环语句逐个将数据项插入到数据库中。例如,使用 C# 语言可以使用以下代码来实现批量插入: ```csharp using System.Data.SqlClient; // 创建连接 SqlConnection conn = new SqlConnection("Server=myServer;Database=myDatabase;User Id=myUser;Password=myPassword;"); try { conn.Open(); // 批量插入数据 foreach (var data in dataList) { SqlCommand cmd = new SqlCommand("INSERT INTO BulkTable (Id, UserName, Pwd) VALUES (@Id, @UserName, @Pwd)", conn); cmd.Parameters.AddWithValue("@Id", data.Id); cmd.Parameters.AddWithValue("@UserName", data.UserName); cmd.Parameters.AddWithValue("@Pwd", data.Pwd); cmd.ExecuteNonQuery(); } } catch (Exception ex) { Console.WriteLine("Error: " + ex.Message); } finally { conn.Close(); } ``` 这种方法的缺点是插入速度慢,特别是当需要插入大量数据时。 第二种方法:使用 SqlBulkCopy SqlBulkCopy 是一个高效的批量插入工具,可以快速地将大量数据插入到数据库中。使用 SqlBulkCopy 需要创建一个 DataTable 对象,然后使用 SqlBulkCopy 对象将数据批量插入到数据库中。例如: ```csharp using System.Data.SqlClient; // 创建 DataTable 对象 DataTable dt = new DataTable(); dt.Columns.Add("Id", typeof(int)); dt.Columns.Add("UserName", typeof(string)); dt.Columns.Add("Pwd", typeof(string)); // 将数据添加到 DataTable 对象 foreach (var data in dataList) { dt.Rows.Add(data.Id, data.UserName, data.Pwd); } // 使用 SqlBulkCopy 将数据批量插入到数据库中 using (SqlConnection conn = new SqlConnection("Server=myServer;Database=myDatabase;User Id=myUser;Password=myPassword;")) { conn.Open(); using (SqlBulkCopy bulkCopy = new SqlBulkCopy(conn)) { bulkCopy.DestinationTableName = "BulkTable"; bulkCopy.WriteToServer(dt); } } ``` 这种方法的优点是插入速度快,特别是当需要插入大量数据时。 第三种方法:使用表值参数 表值参数是 SQL Server 2008 中的新参数类型,可以用于批量插入数据。使用表值参数可以不必创建临时表或许多参数,即可向 Transact-SQL 语句或存储过程发送多行数据。例如: ```csharp using System.Data.SqlClient; // 创建表值参数 SqlParameter parameter = new SqlParameter("@NewBulkTestTvp", SqlDbType.Structured); parameter.TypeName = "dbo.BulkType"; // 创建 DataTable 对象 DataTable dt = new DataTable(); dt.Columns.Add("Id", typeof(int)); dt.Columns.Add("UserName", typeof(string)); dt.Columns.Add("Pwd", typeof(string)); // 将数据添加到 DataTable 对象 foreach (var data in dataList) { dt.Rows.Add(data.Id, data.UserName, data.Pwd); } // 使用表值参数将数据批量插入到数据库中 using (SqlConnection conn = new SqlConnection("Server=myServer;Database=myDatabase;User Id=myUser;Password=myPassword;")) { conn.Open(); using (SqlCommand cmd = new SqlCommand("INSERT INTO BulkTable (Id, UserName, Pwd) SELECT nc.Id, nc.UserName, nc.Pwd FROM @NewBulkTestTvp AS nc", conn)) { cmd.Parameters.Add(parameter); cmd.ExecuteNonQuery(); } } ``` 这种方法的优点是可以高效地批量插入数据,同时也可以将数据类型限制在表值参数中。 三种批量插入数据的方法各有其优缺,选择哪种方法取决于具体的应用场景和需求。
- 粉丝: 5
- 资源: 927
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助