我正在尝试将此行从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或者至少我不能使它工作。 我错过了一些简单的事吗?有解决方法吗?
答案 0 :(得分:112)
这个怎么样?
INSERT OR IGNORE INTO EVENTTYPE (EventTypeName) VALUES 'ANI Received'
(未经测试,因为我没有SQLite ......但是this link非常具有描述性。)
此外,这也应该有效:
INSERT INTO EVENTTYPE (EventTypeName)
SELECT 'ANI Received'
WHERE NOT EXISTS (SELECT 1 FROM EVENTTYPE WHERE EventTypeName = 'ANI Received');
答案 1 :(得分:8)
如果要忽略现有值的插入,表中必须有一个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');
它不会让它重新输入现有主键值...这是如何检查表中是否存在值。
答案 2 :(得分:1)
您还可以使用KEY字段在表上设置约束,并将On Conflict设置为“Ignore”
当发生适用的约束违规时,IGNORE解决方案 算法会跳过包含约束违规的一行 继续处理SQL语句的后续行,就好像 什么都没出错。包含的行之前和之后的其他行 正常插入或更新约束违规。没有错误 使用IGNORE冲突解决算法时返回。