2013-03-08 41 views
9

Tôi đang sử dụng H2. Tôi muốn chèn một giá trị vào một bảng nếu nó không tồn tại. Tôi tạo ra các bảng với:Đưa vào bảng h2 nếu không tồn tại

CREATE TABLE IF NOT EXISTS $types 
    (type VARCHAR(15) NOT NULL UNIQUE); 

Và tôi muốn làm một cái gì đó giống như

REPLACE INTO types (type) values ('type1'); 

tôi thấy an example về Thay thế mà dường như làm việc cho MySQL nhưng tôi đang sử dụng h2. Nhưng tôi nhận được một lỗi khi tôi chạy này từ giao diện điều khiển h2 tôi:

Syntax error in SQL statement "REPLACE[*] INTO TYPES (TYPE) VALUES ('expense') "; expected "ROLLBACK, REVOKE, RUNSCRIPT, RELEASE, {"; SQL statement: 
REPLACE INTO types (type) values ('expense') [42001-170] 42001/42001 

Tôi cũng đã cố gắng

INSERT IGNORE INTO types (type) values ('expense'); 

INSERT INTO types (type) values ('expense') ON DUPLICATE KEY UPDATE type=type; 

Tôi không quan tâm nếu chèn mới ghi đè dữ liệu cũ hoặc nếu nó không thực hiện chèn mới. Có cách nào để làm điều này với cơ sở dữ liệu h2?

+0

bạn có thể thực hiện 'DROP TABLE IF EXISTS' http://www.h2database.com/html/grammar.html#drop_table sau đó bắt đầu từ đầu không? – jchapa

+0

Cảm ơn bạn đã liên kết đến ngữ pháp, có vẻ như không có công cụ sửa đổi nào giống như MySQL cho câu lệnh Chèn: http://www.h2database.com/html/grammar.html#insert. Tôi không nghĩ rằng tôi sẽ thả bàn của tôi, mặc dù. – Alison

Trả lời

15

merge statement nên cho phép bạn đạt được những gì bạn muốn. Tôi không có chuyên gia về H2, nhưng tôi đã sử dụng các tuyên bố MERGE trong SQL Server nhiều lần và từ vẻ của trang web đó nó nên làm các trick.

Từ trang web:

cập nhật hàng hiện có, và chèn hàng không tồn tại. Nếu không có cột khóa nào được chỉ định, các cột khóa chính sẽ được sử dụng để tìm hàng.

+0

Vâng, nó hoạt động! MERGE INTO loại KEY (loại) GIÁ TRỊ ('type1'); – Alison

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