기본적으로 UPSERT를 수행하기 위해 MERGE 문을 사용하고 있습니다. 대상에없는 행의 경우 특정 순서로 삽입하려고합니다. 아쉽게도 ORDER BY 절이 병합 문과 함께 지원되지 않습니다. 한 진술에서 어떤 식 으로든 이것을 할 수 있습니까? 내가 뭘하려고 오전의 더 나은 아이디어에 대한 예를 참조하십시오 : 나는이 병합을 수행 내 코드에 대한 단위 테스트를 작성하고자한다이 작업을 수행 할 수있는 이유를일치하지 않는 행을 SQL Server 2008 MERGE 문에 삽입하는 순서를 지정할 수 있습니까?
CREATE TABLE #destination (ident int not null identity(1,1), id int not null, value int not null)
INSERT INTO #destination (id,value) VALUES (1,50)
CREATE TABLE #source (id int not null, value int not null)
INSERT INTO #source (id,value) VALUES (1,100),(3,300),(2,200)
MERGE #destination d
USING #source s
ON d.id = s.id
WHEN MATCHED THEN
UPDATE
SET d.value = s.value
WHEN NOT MATCHED THEN
INSERT (id,value)
VALUES (s.id,s.value);
SELECT * FROM #destination ORDER BY ident
/*
WILL LIKELY SEE:
1, 1, 100
2, 3, 300
3, 2, 200
WANT TO ACHIEVE:
1, 1, 100
2, 2, 200
3, 3, 300
*/
과 결정에 삽입을 원하는 주문. 나는이 문제를 해결할 방법이 있다는 것을 알고 있지만, 병합 삽입을 명령하는 방법이 있다면 그것은 가장 쉽다.
견적을 통해 행의 순서가 없다는 것을 분명히 알 수 있지만 작업에 대해 궁금합니다. 적어도 두 가지 예에서 업데이트는 삽입하기 전에 제공됩니다. 따라서 작업이 같은 순서로 수행 될 수 있습니까? 삭제, 업데이트 및 삽입? 이 영향을 줄 수있는 방법이 있습니까? –