根据这里类似问题的各种例子,我正在尝试使用sqlite在mono中组合一个upsert。
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);由于某种原因,我得到了一个异常,因为它似乎不喜欢插入行的WHERE部分
Exception thrown: 'Mono.Data.Sqlite.SqliteException' in Mono.Data.Sqlite.dll
Additional information: SQLite error
near "WHERE": syntax error如果我删除插入行上的WHERE,它就会运行。我不知道为什么它不会像那部分。
如果有帮助,SqliteConnection.SQLiteVersion报告版本3.11.0
谢谢
发布于 2016-08-16 15:05:39
INSERT statement有两种形式。WHERE子句只能在使用SELECT查询指定要插入的值的表单中使用:
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;在代码中执行逻辑可能会更容易:
execute("UPDATE ...");
if (connection.Changes == 0) {
execute("INSERT ...");
}https://stackoverflow.com/questions/38967236
复制相似问题