2009-02-10 44 views
70

我想端口这条线从MS SQL Server中的SQLite EXISTS怎么办如果不是在SQLite的

IF NOT EXISTS(SELECT 1 FROM EVENTTYPE WHERE EventTypeName = 'ANI Received') 
    INSERT INTO EVENTTYPE (EventTypeName) VALUES ('ANI Received'); 

似乎SQLite不支持的IF NOT EXISTS或至少我不能使它工作。 我错过了一些简单的东西吗?有没有解决方法?

回答

108

这个怎么样?

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'); 
+12

谢谢。但是,应该注意的是,INSERT OR IGNORE块只在EventTypeName设置为唯一时才有效。 – AngryHacker 2009-02-10 05:44:10

1

您还可以设置一个约束在具有KEY字段并设置为冲突的表格上“忽略”

当发生适用的约束冲突时, IGNORE解析 算法跳过包含约束冲突的一行,并且 继续处理SQL语句的后续行,就好像 没有出错。包含 违反约束的行之前和之后的其他行通常会插入或更新。当使用IGNORE冲突解决算法时,没有错误返回 。

SQLite Documentation

4

如果你想忽略现有值的插入,必须有你的表中的关键字字段。只要创建一个表,主键字段一样:

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'); 

它不会让它再次进入现有的主key Value ...这是您可以如何检查表中是否存在值。

相关问题