条件库从C#中的一个数据表插入到另一个数据表

时间:2018-03-10 13:23:47

标签: c# sql

我的C#代码中有2个表,dtProducts从SQL Server表填充,dtProductdetails从MS Access填充。

dtProductcodenamedtProductdetailsidcodelocalname,{{ 1}}。

我需要替换price中的localname,并使用dtProductdetails替换name代码在两个数据表中都具有唯一性。

然后将dtProducts更新为SQL Server中的第三个表。

首先:我该怎么办?第二:我有超过100K的记录可供使用,任何人都可以建议在性能方面这样做的最佳方式。

2 个答案:

答案 0 :(得分:1)

从以下查询开始,该查询应该执行您正在寻找的数据库端:

UPDATE dtProductdetails
SET PD.localname = P.name
FROM dtProductdetails PD
JOIN dtProducts P ON PD.code = P.code

您可以使用以下C#代码执行更新:

dtProductdetails.Rows
    .Cast<DataRow>()
    .Join
    (
        dtProducts.Rows.Cast<DataRow>(),
        r1 => new { p1 = r1["code"], p2 = r1["code"] },
        r2 => new { p1 = r2["code"], p2 = r2["code"] },
        (r1, r2) => new { r1, r2 }
    )
    .ToList()
    .ForEach(o => o.r1.SetField("localname", o.r2["name"]));

可替换地:

var query = from r1 in dtProductdetails.AsEnumerable()
            join r2 in dtProducts.AsEnumerable()
            on r1.Field<Int32>("code") equals r2.Field<Int32>("code")
            select new { r1, r2 };

foreach (var x in query)
    x.r1.SetField("localname", x.r2.Field<String>("name"));

确保将两个表的code字段设置为键索引。

答案 1 :(得分:0)

How to create indexes on MSDN
您还可以使用UPDATE JOIN普通SQL来更新记录

UPDATE dtProductdetails
SET localname = name
FROM dtProductdetails
JOIN dtProducts
     ON dtProductdetails.code = dtProducts.code

可以通过这种方式创建索引,这样可以提高join的性能:

CREATE UNIQUE INDEX UI_dtProductdetails_Code   
   ON dtProductdetails (code);

CREATE UNIQUE INDEX UI_dtProducts_Code   
   ON dtProducts (code);