根据这里类似问题的各种示例,我试图在单声道中使用sqlite组合一个upsert。
awk 'BEGIN{FS=OFS="~"} {
sub(/[T ].*/, "", $2)
split($2, a, /\//)
$2 = a[3] "-" a[1] "-" a[2] "T00:00:00Z"
} 1' file
ab c1~2010-10-20T00:00:00Z~1234~10.02~530.55
ab c2~2010-10-10T00:00:00Z~12346~11.03~531
abc3~2010-10-10T00:00:00Z~122~12~532.44
abc4~2010-10-11T00:00:00Z~110~13~533
出于某种原因,我得到了一个例外,因为它似乎不喜欢INSERT行的WHERE部分
string query = string.Format(@"
UPDATE {0} SET data=@data, protoent=@protoent, posX=@pX, posY=@pY, posZ=@pZ, ownerpubkey=@ownerpubkey WHERE key=@key;
INSERT INTO {0} (key, data, protoent, posX, posY, posZ, ownerpubkey) VALUES (@key, @data, @protoent, @pX, @pY, @pZ, @ownerpubkey) WHERE changes() = 0;
", PersistEntityRecord.TableName);
如果我删除了INSERT行上的WHERE,它就会运行。我不确定为什么它不会像那部分那样。
SqliteConnection.SQLiteVersion报告版本3.11.0如果有帮助
由于
答案 0 :(得分:0)
INSERT statement有两种形式。 WHERE子句只能在使用SELECT查询指定要插入的值的表单中使用:
str
在代码中执行逻辑可能更容易:
UPDATE {0}
SET data=@data, protoent=@protoent, posX=@pX, posY=@pY, posZ=@pZ, ownerpubkey=@ownerpubkey
WHERE key=@key;
INSERT INTO {0} (key, data, protoent, posX, posY, posZ, ownerpubkey)
SELECT @key, @data, @protoent, @pX, @pY, @pZ, @ownerpubkey
WHERE changes() = 0;