2010-01-19 3 views
4

중복 키에 대한 SQL Server 2005의 작업과 유사한 업데이트를 수행 할 수있는 솔루션을 찾고 있습니다.이 작업으로 인해 많은 수의 항목이 삽입되거나 업데이트 될 수 있습니다. SQL Server 2008은 완벽하게 수행 할 수있는 깔끔한 연산을 가지고 있습니다. 문제는 SQL Server 2005에 머물러 있다는 것입니다.
표준 솔루션을 조사했지만 모든 것이 좋지 않습니다. 하나의 항목이 업데이트/삽입됩니다.
누구나 이전 버전의 SQL Server에서 MERGE 동작을 복제하는 방법을 알고 있습니까?SQL Server 2005, 대량 업데이트 또는 삽입

+0

SQL Server * 2003 *은 무엇입니까? – Heinzi

+0

나쁘다, 2005 버전을 의미했다. –

답변

6

Alex Kuznetsov's blog에는 UPDATE 문의 OUTPUT 절을 사용하는 것이 좋습니다. 블로그 항목 (테스트되지 않음)에서 예제를 바꾸어 말하자면 :

DECLARE @updated_ids table(id int) 

UPDATE table 
    SET ... 
OUTPUT inserted.id INTO @updated_ids 
    FROM table INNER JOIN data-to-insert ON table.id = data-to-insert.id 

INSERT INTO table 
SELECT ... 
    FROM data-to-insert 
WHERE id NOT IN (SELECT id FROM @updated_ids) 
+0

OUTPUT 절을 더 사용하기 시작해야한다! –

+2

성능에 대한 참고 사항으로, 기본 키를 테이블 변수에 추가하면 실행 속도가 크게 빨라집니다. 필자에게 그것은 100k 행의 삽입/업데이트 실행 시간을 4 분에서 ~ 6 초로 줄였습니다. 'declare @updated_ids 테이블 (id int PRIMARY KEY CLUSTERED)' – Tr1stan

관련 문제