我试图将这行代码从MS SQL Server移植到SQLite。
IF NOT EXISTS(SELECT 1 FROM EVENTTYPE WHERE EventTypeName = 'ANI Received')
INSERT INTO EVENTTYPE (EventTypeName) VALUES ('ANI Received');
看起来SQLite不支持IF NOT EXISTS,或者至少我无法使其工作。
我错过了什么简单的东西吗?有没有解决办法?
这个怎么样?
INSERT OR IGNORE INTO EVENTTYPE (EventTypeName) VALUES 'ANI Received'
(由于我没有SQLite,因此未经测试...但是这个链接非常详细。)
此外,以下内容也应该有效:
INSERT INTO EVENTTYPE (EventTypeName)
SELECT 'ANI Received'
WHERE NOT EXISTS (SELECT 1 FROM EVENTTYPE WHERE EventTypeName = 'ANI Received');
CREATE TABLE table_name (key_field data_type PRIMARY KEY, ...)
CREATE TABLE IF NOT EXISTS TblUsers (UserId INTEGER PRIMARY KEY, UserName varchar(100), ContactName varchar(100),Password varchar(100));
然后在表中执行插入或替换/插入或忽略查询,例如:
INSERT OR REPLACE INTO TblUsers (UserId, UserName, ContactName ,Password) VALUES('1','UserName','ContactName','Password');
它不会让其重新进入现有的主键值... 这就是您可以检查表中是否存在某个值的方式。
你可以通过数学方法使用“NOT EXISTS”,即反转“EXISTS”的输出:
SELECT (1-EXISTS(<Your_SELECT>));
您的SELECT语句是:SELECT 1 FROM EVENTTYPE WHERE EventTypeName = 'ANI Received'
如果exists为1,则1-1的结果为0。如果exists为0,则1-0的结果为1。
您还可以使用表的KEY字段设置约束,并设置On Conflict "Ignore"。
当出现适用的约束违规时,IGNORE解决算法会跳过包含约束违规的一行,并继续处理后续的SQL语句行,就好像什么都没有发生一样。在包含IGNORE冲突解决算法的情况下,插入或更新了包含约束违规的行之前和之后的其他行。使用IGNORE冲突解决算法时不会返回错误。
IGNORE
当适用约束违规时,IGNORE 解决算法会跳过包含约束违规的那一行,并继续处理 SQL 语句的后续行,就像什么都没有发生一样。在使用 IGNORE 冲突解决算法时不会返回错误。其他在包含约束违规的行之前和之后的行将正常插入或更新。 - ManuelSchneid3r