2

대상 테이블에 원본 테이블에 존재하지 않는 usr_cd PK 열이 있습니다. 따라서 소스에서 타겟으로 삽입하는 동안 고유 한 코드를 생성하려고합니다. MERGE 진술을 사용할 때 어떻게 이것을 할 수 있습니까?MERGE 내부의 INSERT에서 고유 코드를 생성하는 방법은 무엇입니까?

다음 옵션은 운없이 시도됩니다

  1. 시퀀스 개체 : MERGE 내에서 사용할 수 없습니다.
  2. SP 호출 : INSERTMERGE의 SP를 실행할 수 없습니다.
  3. 함수 호출 : UDF 내에서 시퀀스 개체를 사용할 수 없으므로 도움이되지 않습니다. 또한 테이블에 고유 한 값을 저장하면 UDF 내에서 업데이트 할 수 없습니다.
  4. 소스 테이블에 코드 추가 : 일부 레코드가 업데이트되고 일부 레코드가 삽입되므로 사용할 수 없으므로 시퀀스가 ​​중단됩니다.

대상 테이블에 기본값을 추가하는 것이 하나의 옵션이지만이를 피하고 싶습니다.

MERGE을 사용하는 동안 다른 방법이 있다면 알려주세요.

+1

나는 그것을 얻지 않는다. 단순히 ID 열을 사용하지 않는 이유는 무엇입니까? 그것은 이런 종류의 문제에 대한 최선의 해결책입니다. –

+0

@ZoharPeled 삽입 된 레코드를 별도로 추적해야하므로 ID를 사용할 수 없습니다. –

답변

3

는 사실, NEXT VALUE FOR에 대한 문서 말 :

제한 및 제한

NEXT VALUE FOR 기능은 다음 상황에서 사용할 수 없습니다하십시오 MERGE 문에서

합니다. 합니다 (NEXT VALUE FOR 기능은 목표 테이블에 기본 제약 조건에 사용 이며, 기본값은 MERGE 문의 CREATE 성명에서 을 사용하는 경우를 제외하고.)

그래서, 당신은으로 NEXT VALUE FOR을 사용하지 않으려면 목표 테이블 정의의 기본 제약 조건 또는 단순한 IDENTITY, 내가 생각할 수있는 유일한 다른 것은 트리거입니다. INSTEAD OF INSERT 트리거.

+0

다른 옵션이없는 것처럼 보입니다.이 시나리오에서 병합하기보다는 별도의 업데이트와 조인 (적어도 시퀀스 개체를 사용할 수 있음)을 삽입하는 것이 좋습니다. –

+0

@RajeshBhat, 네, 별도의 INSERT와 UPDATE를 사용하는 것은 확실히 옵션입니다. –