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

时间:2015-07-06 05:37:04

标签: c# linq

我在SQL Server中有两个表。

表一包含以下列:

1-id
2-name
3-family
4-address

,表2包含以下列:

1-id
2-name

在表1中,我有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();
}

还有其他方法吗?感谢。

4 个答案:

答案 0 :(得分:1)

利用Linq to SQL逐个插入记录将花费大量时间。而不是我建议使用批量插入,以便您可以在更短的时间内插入数据,以便您可以使用DataTable和OpenXML。该教程的内容是:Bulk Insertion of Data Using C# DataTable and SQL server OpenXML function

或使用此

SqlBulkCopy.WriteToServer Method (DataTable)

答案 1 :(得分:0)

尝试

Gson gson = new Gson();
gson.fromJson(data, obj.class);

EntityDataReader

答案 2 :(得分:0)

使用数据表

的帮助,在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);
                    }

答案 3 :(得分:-1)

假设您的表名是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/en-us/library/ms188263%28v=sql.105%29.aspx