如何使用Linq-to-SQL将一个表中的所有行插入另一个表
本文关键字:另一个 插入 一个 Linq-to-SQL 何使用 | 更新日期: 2023-09-27 18:01:12
我在SQL Server中有两个表。
表一包含以下列:
1-id
2-name
3-family
4-address
表二包含以下列:
1-id
2-name
在表一中,我有100000行,并通过以下查询读取所有记录:
var query = (from p in datacontext.table1
select p).toArray();
我想把up查询中的所有数据插入到表2中,现在我使用这个方法:
for(int i = 0; i < query.count(); i++) {
table2 beh = new tabl2();
beh.name = query[0].name;
datacontext.table2.insertonsubmit(beh);
datacontext.submitchange();
}
还有别的办法吗?谢谢
使用Linq到SQL逐个插入记录将花费大量时间。相反,我建议使用批量插入,这样你的数据就可以在更短的时间内一次性插入,你可以使用DataTable和OpenXML。该教程是:使用C#DataTable和SQL server OpenXML函数批量插入数据
或者使用这个
SqlBulkCopy。WriteToServer方法(DataTable(
尝试
var bulkCopy = new SqlBulkCopy(connection);
bulkCopy.DestinationTableName = "table2";
bulkCopy.ColumnMappings.Add("Name", "Name");
using (var reader = new EntityDataReader<Table1>(query))
{
bulkCopy.WriteToServer(reader);
}
EntityDataReader
在System.Data.SqlClient
数据中使用批量插入,使用数据表在更短的时间内插入数据库
DataTable dt = getData();
SqlBulkCopyOptions options = SqlBulkCopyOptions.Default;
using (SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(sqlconnection, options, null))
{
dt.Columns.Add("Id", typeof(long)).SetOrdinal(0);
dt = AddDefaultColumn(dt);
sqlBulkCopy.BulkCopyTimeout = 300;
sqlBulkCopy.DestinationTableName = "tableName";
sqlBulkCopy.WriteToServer(dt);
}
假设您的表名为table1和table2,其中列为id和描述,则可以使用
INSERT INTO table2 (id, description)
SELECT table2.id, table2.description
FROM table1;
此外,您可以添加一个where
INSERT INTO table2 (id, description)
SELECT table2.id, table2.description
FROM table1 where table1.id =1;
您可以访问此链接了解更多信息https://technet.microsoft.com/en-us/library/ms188263%28v=sql.105%29.aspx