繁体   English   中英

如何使用Linq-to-SQL将一个表中的所有行插入到另一个表中?

[英]How can I insert all rows from one table into another table with Linq-to-SQL?

我在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();

我想将所有来自向上查询的数据插入到table2中,现在我使用此方法:

for(int i = 0; i < query.count(); i++) {
     table2 beh = new tabl2();
     beh.name = query[0].name;
     datacontext.table2.insertonsubmit(beh);
     datacontext.submitchange();
}

还有另一种方法吗? 谢谢。

利用Linq to SQL一条一条插入记录将花费大量时间。 与其相反,我建议您使用批量插入,这样您就可以一次使用DataTable和OpenXML来一次性插入数据。 该教程的内容是: 使用C#DataTable和SQL Server OpenXML函数批量插入数据

或使用这个

SqlBulkCopy.WriteToServer方法(数据表)

尝试

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在更少的时间内将插入到db中

 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和description列,您可以使用

INSERT INTO table2  (id, description)
       SELECT table2.id, table2.description
       FROM table1;

此外,您可以在其中添加

INSERT INTO table2  (id, description)
           SELECT table2.id, table2.description
           FROM table1 where table1.id =1;

您可以访问此链接以获取更多信息https://technet.microsoft.com/zh-cn/library/ms188263%28v=sql.105%29.aspx

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM