2011-12-17 2 views
0

를 업데이트 할 아무것도 존재하지 않는 경우는 삽입합니다. 솔루션은 대부분의 데이터베이스 (MySQL, H2, Postgres, Oracle, DB2, MSSQL, Hsql, Derby)에서 보편적이어야합니다. ID (Pr.Key) 및 당신은이 작업을 수행하는 저장 프로 시저를 사용할 필요가 TXT나는 기본 키에 의해 행을 업데이트하려고 SQL 쿼리를 만들 필요가

+2

이의 이름은'UPSERT'입니다. 일반적으로 'MERGE'로 달성되지만 이것은 결코 보편적으로 이용 가능하지 않습니다. "대부분의 데이터베이스"에 대해 더 구체적으로 설명 할 수 있습니까? –

+1

@Oded 아무 것도. –

+0

@MartinSmith 정확히 내가 원하는 바를 수행하는 MySQL의'REPLACE' 문은 알고 있지만 MySQL에서만 작동하므로 로컬 솔루션이 맞지 않습니다. –

답변

3

을하지만, 모든 곳에서 작동하지 않습니다 : 참조

MERGE into thetable using (select theid from thetable) 
when matched then update thetable thecolumn = thevalue where id = theid 
when not matched then insert into thetable blablabla; 

다른 솔루션은 제약 조건 위반 여부를 감지 오류를 처리 시도하고 어쨌든 삽입하는 것입니다 그렇다면 대신 업데이트하십시오.

+0

이것은 '해결책은 보편적이어야한다'와 모순된다. – GSerg

+1

글쎄, 내가 요구 사항을 주어진 가지고 올 수있는 가장 보편적입니다 ... 또 다른 해결책은 시도하고 어쨌든 삽입하는 것입니다,하지만 그것은 오류가 고유 키 제약 조건 위반임을 감지 의미 할 것입니다! – fge

0

: 코드 예제는

두 개의 열로 구성된 간단한 테이블을 고려하시기 바랍니다. 당신은 SQL의 MERGE 문을 원하는 http://jumpingbean.co.za/blog/mysql-if-exists-update-else-insert

+2

이 코멘트해야한다. – Oded

+0

좀 더 구체적으로 알려주시겠습니까? 예를 들어 테이블이 두 개의 열 (id (Pr.Key) 및 txt)으로 구성된 경우 쿼리의 모양은 어떻습니까? –

0
아마

:

INSERT INTO table (id,txt) VALUES (1,"Hello") 
    ON DUPLICATE KEY UPDATE txt="World"; 

그러나 이것은 MySQL의입니다 만

관련 문제