[sql] SQLite에없는 경우 수행하는 방법
이 줄을 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 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 필드를 사용하여 테이블에 대한 제약 조건을 설정하고 On Conflict “Ignore”를 설정할 수도 있습니다.
적용 가능한 제약 조건 위반이 발생하면 IGNORE 해결 알고리즘은 제약 조건 위반이 포함 된 한 행을 건너 뛰고 아무 문제가없는 것처럼 SQL 문의 후속 행을 계속 처리합니다. 제한 조건 위반이 포함 된 행 앞뒤의 다른 행이 정상적으로 삽입되거나 업데이트됩니다. IGNORE 충돌 해결 알고리즘을 사용하면 오류가 반환되지 않습니다.