因为sqlite 不支持 UPDATE table1, table2 SET table1.value=table2.value, a.type=b.type WHERE table1.sid=table2.sid 这种表间更新,网上提供了两种方法
第一种
INSERT OR REPLACE INTO t1(key, Column1, Column2) SELECT t2.key, t2.Column1,t2.Column2 FROM t2, t1 WHERE t2.key = t1.key;
第二种
UPDATE t1
SET Column1 =
( SELECT Columnx
FROM t2
WHERE t2. KEY = t1. KEY ), Column2 =
( SELECT Columny
FROM t2
WHERE t2. KEY = t1. KEY ),
WHERE t1. KEY =
( SELECT KEY
FROM t2
WHERE t2. KEY = t1. KEY );
这两种的方法我都试了,效果很差,主要是太慢 我一个主表,5000条,一个源表7W条,更新5000条表里的一个项,就要用5分多钟,
回归最原始方,一条条更新,用上事务,做同样的工作,用时不到一秒!!!!现在把代码分享组大家
思路很简单,直接上代码!
DataTable sdt = myDB.ExecuteDataTable(“select * from fpdk where 身份证号 in(select sfzh from szfp)”);
//dataGridView1.DataSource = sdt;
string sqlstr = “”;
for (int i = 0; i < sdt.Rows.Count; i++)
{
sqlstr += “update szfp set tpsx=’” + sdt.Rows[i][“脱贫属性”].ToString() + “’ where sfzh=’” + sdt.Rows[i][“身份证号”].ToString() + “’;”;
if (i % 500 == 0)
{
myDB.ExecuteNonQuery(sqlstr);
sqlstr = "";
label1.Text = i.ToString();
Application.DoEvents();
}
}
if (sqlstr.Length > 1)
myDB.ExecuteNonQuery(sqlstr);