Sqlite Mono upsert

Sqlite Mono upsert

根据此处类似问题的各种示例,我尝试在单声道中使用 sqlite 组合一个更新插入。

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 部分

Exception thrown: 'Mono.Data.Sqlite.SqliteException' in Mono.Data.Sqlite.dll

Additional information: SQLite error

near "WHERE": syntax error

如果我删除 INSERT 行上的 WHERE,它就会运行。我不确定为什么它不像那部分。

SqliteConnection.SQLiteVersion 如果有帮助,请报告版本 3.11.0

谢谢

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 ...");
}