sqlite 高速表间更新 update t1 set from t2 类型的更新

因为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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值