2009-02-10 27 views
70

Tôi cố gắng để cảng dòng này từ MS SQL Server để SQLiteLàm thế nào để làm NẾU KHÔNG EXISTS trong SQLite

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

Dường như SQLite không hỗ trợ NẾU KHÔNG EXISTS hoặc ít nhất là tôi không thể làm cho nó công việc. Tôi có thiếu gì đó đơn giản không? Có cách giải quyết nào không?

Trả lời

108

Làm thế nào về điều này?

INSERT OR IGNORE INTO EVENTTYPE (EventTypeName) VALUES 'ANI Received' 

(. Chưa được kiểm tra như tôi không có SQLite ... Tuy nhiên this link là khá mô tả)

Ngoài ra, điều này cũng nên làm việc:

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

Cảm ơn. Tuy nhiên, cần lưu ý rằng phần INSERT hoặc IGNORE chỉ hoạt động nếu EventTypeName được đặt là duy nhất. – AngryHacker

+2

Đúng. Tôi cho rằng nó là duy nhất cho nó được sử dụng như thế nào trong SQL mẫu. Nếu không, phương pháp thứ hai nên được sử dụng. – beach

+0

Phương pháp thứ hai có thực sự được sử dụng nếu EventTypeName không phải là duy nhất không? Tôi đang cố gắng để làm một cái gì đó tương tự và tôi thấy rằng mệnh đề SELECT WHERE NOT EXISTS đang trả về nhiều hàng, trên thực tế mỗi hàng ở đâu (tương đương) EventTypeName! = 'ANI Received' là đúng. – Michael

1

Bạn cũng có thể thiết lập một chế trên Bảng có các trường KEY và đặt Xung đột "Bỏ qua"

Khi xảy ra vi phạm ràng buộc áp dụng, IGNORE độ phân giải thuật toán bỏ qua một hàng có chứa vi phạm ràng buộc và tiếp tục xử lý các hàng tiếp theo của câu lệnh SQL như thể không có gì sai. Các hàng khác trước và sau hàng có chứa vi phạm ràng buộc được chèn hoặc cập nhật bình thường. Không có lỗi nào là được trả lại khi thuật toán giải quyết xung đột IGNORE được sử dụng.

SQLite Documentation

4

Nếu bạn muốn bỏ qua việc đưa giá trị hiện có, có phải là một lĩnh vực quan trọng trong bảng của bạn. Chỉ cần tạo một bảng Với Primary Key Field Giống như:

CREATE TABLE IF NOT EXISTS TblUsers (UserId INTEGER PRIMARY KEY, UserName varchar(100), ContactName varchar(100),Password varchar(100)); 

và sau đó chèn Hoặc Thay thế/Insert Hoặc Bỏ qua Query trên Bảng Giống như:

INSERT OR REPLACE INTO TblUsers (UserId, UserName, ContactName ,Password) VALUES('1','UserName','ContactName','Password'); 

Nó sẽ không cho phép nó nhập lại hiện Tiểu học Giá trị khóa ... Đây là cách bạn có thể Kiểm tra liệu giá trị có tồn tại trong bảng hay không.

Các vấn đề liên quan