如何在 SQLite 中检查匹配以插入新数据或更新它们?

How to check for matching in SQLite in order to insert new data or update them?

如果列 EqpCode 不存在匹配值,我想将数据插入 table。如果有任何匹配项,我想更新该行。 我使用了这个查询,但它在 WHERE:

附近有语法错误
INSERT INTO FileInfo(EqpCode, EqpName, FileName) VALUES ('123', 'test01', 'test02') 
WHERE NOT EXISTS (SELECT 1 FROM FileInfo WHERE EqpCode='123')

首先,您必须将 EqpCode 列定义为 UNIQUE(如果 table 中没有,则为 PRIMARY KEY):

CREATE TABLE FileInfo(
  id INTEGER PRIMARY KEY,
  EqpCode TEXT UNIQUE, 
  EqpName TEXT, 
  FileName TEXT
);

然后使用SQLite的UPSERT:

INSERT INTO FileInfo(EqpCode, EqpName, FileName) VALUES ('123', 'test01', 'test02')
ON CONFLICT(EqpCode) DO UPDATE 
SET EqpName = EXCLUDED.EqpName,
    FileName = EXCLUDED.FileName;

这样,仅当 table 中不存在 '123' 时才会插入新行。
如果确实存在,则该行将使用提供的 EqpNameFileName 值进行更新。

参见demo