9

存在する場合はテーブル行を更新する必要があり、そうでない場合は新しい行を挿入します。私は試した:

INSERT OR REPLACE INTO table VALUES ...

しかし、行行が存在する場合、このステートメントは行のROWIDを変更します。それは私が避けようとしているものです(行IDが必要です:D)

また、更新が行われた場合に、更新から何らかの戻り値を取得する方法を見つけようとしましたが、まだ方法がわかりません...更新ステートメントから戻り値を取得できた場合、挿入を続行するかどうかを選択できました。

この問題に対する提案や解決策はありますか? それとも、ROWID のコピーを作成し、それを「純粋な」テーブル ROWID の代わりに使用する必要がありますか?

よろしくお願いします。

ps: 私はHEREを見ていましたが、sqlite にも OUTPUT という特殊な単語があるかどうか疑問に思っていましたが、Google は役に立ちませんでした..

----コメントを読んだ後に編集:

テーブル スキーマの例

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")
4

4 に答える 4

1

table_id自分がunique主キーであることに加えて、次のように指定する必要があります。

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
于 2012-08-03T14:28:34.890 に答える