You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用ogrinfo(SQLite方言)更新Shapefile行记录时的异常问题

问题原因及解决办法

错误根源

你的UPDATE语句里的CASE表达式没加ELSE分支,导致每次执行更新时,所有不匹配目标name的行,iacolor字段都会被默认设为NULL——这就是第一次设置的"amber"被第二条命令清掉的原因。

比如第一条命令:

ogrinfo tmp.shp -dialect sqlite -sql 'update tmp set iacolor=case when name="50mn_R9_10" then "amber" end'

这条命令其实已经把所有name不等于"50mn_R9_10"的行的iacolor改成了NULL(如果原来有值也会被清空)。第二条命令执行时,同样的逻辑,只有name匹配"50mn_R10_R11"的行被设为red,其他行(包括之前设amber的)全被改成NULL。

两种修正方案

方案1:给CASE表达式加ELSE分支保留原值

每次更新时,只修改目标行,其他行保留原有iacolor值:

第一条命令修正后:

ogrinfo tmp.shp -dialect sqlite -sql 'update tmp set iacolor=case when name="50mn_R9_10" then "amber" else iacolor end'

第二条命令修正后:

ogrinfo tmp.shp -dialect sqlite -sql 'update tmp set iacolor=case when name="50mn_R10_R11" then "red" else iacolor end'

方案2:用WHERE条件限定更新范围(推荐)

直接通过WHERE子句指定要更新的行,这样只会修改匹配的记录,完全不影响其他行,逻辑更清晰,效率也更高:

第一条命令:

ogrinfo tmp.shp -dialect sqlite -sql 'update tmp set iacolor="amber" where name="50mn_R9_10"'

第二条命令:

ogrinfo tmp.shp -dialect sqlite -sql 'update tmp set iacolor="red" where name="50mn_R10_R11"'

内容的提问来源于stack exchange,提问作者Gery

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 20:02:42