Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQLITE-插入或更新而不更改ROWID值_Sqlite_Sql Update - Fatal编程技术网

SQLITE-插入或更新而不更改ROWID值

SQLITE-插入或更新而不更改ROWID值,sqlite,sql-update,Sqlite,Sql Update,如果存在,我需要更新表行,否则插入新行。 我试过: 但是,如果行存在,这个语句会更改行的ROWID,这就是我试图避免的(我需要ROWID:D) 我还试图找到一种从更新中获取某种返回值的方法,以防发生更新,但我仍然不明白如何。。。如果我可以从update语句中获得返回值,我可以选择是否继续插入 你对这个问题有什么建议或解决办法吗?或者我需要制作一个ROWID的副本并使用它来代替“纯”表ROWID吗 提前感谢,致以最良好的问候 ps:我在看,我想知道sqlite是否也有输出特殊单词,但谷歌没有帮我

如果存在,我需要更新表行,否则插入新行。 我试过:

但是,如果行存在,这个语句会更改行的ROWID,这就是我试图避免的(我需要ROWID:D)

我还试图找到一种从更新中获取某种返回值的方法,以防发生更新,但我仍然不明白如何。。。如果我可以从update语句中获得返回值,我可以选择是否继续插入

你对这个问题有什么建议或解决办法吗?或者我需要制作一个ROWID的副本并使用它来代替“纯”表ROWID吗

提前感谢,致以最良好的问候

ps:我在看,我想知道sqlite是否也有输出特殊单词,但谷歌没有帮我

----阅读评论后编辑:

表模式示例

CREATE TABLE test (
    table_id TEXT NOT NULL,
    some_field TEXT NOT NULL,
    PRIMARY KEY(table_id)
)

INSERT or REPLACE INTO test (table_id, some_field) VALUES ("foo","bar")

除了主键之外,您还需要指定您的
表\u id
唯一的

sqlite> CREATE TABLE test (
    table_id TEXT NOT NULL,
    some_field TEXT NOT NULL,
    PRIMARY KEY(table_id),
    UNIQUE(table_id)
);

sqlite> insert or replace into test values("xyz", "other");
sqlite> select * FROM test;
xyz|other
sqlite> insert or replace into test values("abc", "something");
sqlite> insert or replace into test values("xyz", "whatever");
sqlite> select * FROM test;
abc|something
xyz|whatever

我测试了Chris的建议,但rowid仍然会改变。我认为最好的替代方法是进行选择,以查看是否已经存在具有该键的行。如果是,请更新,否则,请插入。。。好的旧款式,但保证有效。

将其与select结合使用,如下所示

INSERT or REPLACE INTO test (ROWID, table_id, some_field)
VALUES ((SELECT ROWID from test WHERE table_id = 'foo' UNION SELECT max(ROWID) + 1 from test limit 1), 'foo','bar')

您可以发布一个表架构和完整的“insert或replace”语句吗?
ExecuteOnQuery
返回受影响的行数,因此如果更新返回0,请执行insert。
INSERT or REPLACE INTO test (ROWID, table_id, some_field)
VALUES ((SELECT ROWID from test WHERE table_id = 'foo' UNION SELECT max(ROWID) + 1 from test limit 1), 'foo','bar')