服务器上有一张视图,将视图里的部分数据同步到本地数据库表里,当有数十万条数据时,同步特别慢,请问正确的思路是什么:
string sql = "select * from V_BSDT_STUDENT"; //服务器数据库里的视图
DataTable dt = bll.SelectOracleSql(sql); //获取它的所有数据
if (dt.Rows.Count > 0)
{
for (int i = 0; i < dt.Rows.Count; i++)
{
DataRow row = dt.Rows[i];
DataTable ds = bll.SelectbySql("select StudentID from WC_Student where StudentID='" + row["XH"].ToString().Trim() + "'"); //本地数据库表里是否存在这条数据
if (ds.Rows.Count > 0)//有则更新
{
string updateSql = "update WC_Student set " +
...
"where StudentID='" + row["XH"].ToString().Trim() + "'";
bll.RunbySql(updateSql);
}
else //没有则增加
{
DataRow newRow;
newRow = bll.SelectbySql("select * from WC_Student where 1=2").NewRow();
...
bll.Insert(newRow, "WC_Student");
}
}
}
可以先用 SqlBulkCopy 插入到临时表中,然后批量更新数据就好了
SqlBulkCopy 比你这样快多了,楼上正解