2017-03-08 6 views
1

테스트 할 쿼리가 있습니다. 기존 기본 키가있는 테이블의 데이터를 찾으면 쿼리가 데이터를 업데이트해야합니다. 그렇지 않으면 테이블에 삽입됩니다.병합 및 일치하는 쿼리에서 오류가 발생하는 쿼리 SQL 서버

기본 키의 유형은 int이며 볼 수있는 속성입니다. 신원은 "참"으로 설정되어 있으면 기본 키가 삽입 된 경우 새 ID가 자동으로 설정된다고 가정합니다.

MERGE INTO Test_table t 
USING (SELECT 461232 ID,'Test1-data' Fascia FROM Test_table) s 
ON (t.ID = s.ID) 
WHEN MATCHED THEN 
UPDATE SET t.Fascia = s.Fascia 
WHEN NOT MATCHED THEN 
INSERT (Fascia) 
VALUES (s.Fascia); 

이 쿼리는 작동하지 않으며 데이터 나 업데이트를 삽입하지 않습니다. 또한, 쿼리가 컴파일됩니다 나는 내가 할 수있는 컴파일 오류 또한

나는 자바 내가 가정입니다 있도록 데이터베이스를 쿼리 문을 준비 사용하기 때문에이 쿼리가 작동하는 것입니다 내가 원하는 이유를하지 않는

Java에서 set 메소드를 사용하여 값을 전달할 수 있습니다.

내 검색어에 이상이 있으면 알려주십시오.

+0

는 "여기서 문제는 작동하지 않습니다이 쿼리입니다." 내 수정 구슬을 가져 와서 무엇이 잘못되었는지 짐작하십시오. "오류를주는 쿼리"그렇다면 왜 오류가 발생합니까? 우리의 도움이 필요하면 어둠 속에서 우리를 버려 두는 이유는 무엇입니까 ??? – HoneyBadger

+0

@ HoneyBadger 어둠 속에서 당신을 떠나지 않을 것입니다 ... 쿼리가 업데이트되거나 삽입되지 않지만 오류없이 실행됩니다. 업데이트 된 질문. – user3384231

답변

0

소스로 대상 테이블에서 선택합니다.

merge보다 먼저 FROM Test_table을 제거하거나 에 1 행 이상 있어야합니다.

rextester 데모 : http://rextester.com/XROJD28508

MERGE INTO Test_table t 
USING (SELECT 461232 ID,'Test1-data' Fascia --FROM Test_table 
    ) s 
ON (t.ID = s.ID) 
WHEN MATCHED THEN 
UPDATE SET t.Fascia = s.Fascia 
WHEN NOT MATCHED THEN 
INSERT (Fascia) 
VALUES (s.Fascia); 
+0

고마워요. From Test_table을 제거했습니다. – user3384231

+0

@ user3384231 도와 드리겠습니다! – SqlZim