2014-10-14 3 views
0

안녕하세요 한 테이블에서 다른 테이블로 데이터를 마이그레이션해야하므로 커서를 사용하지 않는 것이 좋습니다.SQL Server : 커서를 사용하지 않고 테이블에서 다른 테이블로 데이터 복사

나는 이런 식으로 뭔가를해야 할 것 때문에 이것은 매우 쉬울 것이다 커서를 사용하여 :

DECLARE db_cursor CURSOR FOR 
select Id, dataToMigrate 
from OriginTable 
where bar <> 'foo' 

OPEN db_cursor 
FETCH NEXT FROM db_cursor into @Id, @DataToMigrate 

WHILE @@FETCH_STATUS = 0 
BEGIN 
    UPDATE DestinationTable 
    SET Value = @DataToMigrate 
    Where Id = @Id 

    FETCH NEXT FROM db_cursor into @Id, @DataToMigrate 
END 

CLOSE db_cursor 
DEALLOCATE db_cursor 

그러나이 잘못 느낀다. 나는 커서없이 이것을하는 쉽고 영리한 방법이 틀림 없음에 틀림 없다.

누구나 더 나은 방법을 알고 계십니까?

+0

하위 선택을 사용하면 도움이되지 않습니까? – AndreDuarte

답변

4

예 커서가 완전히 잘못된 방법입니다. 더 나은 방법을 찾고 계신 것에 대한 명성. 간단한 업데이트 문을 사용하여이 작업을 수행 할 수 있습니다.

update d 
set Value = o.DataToMigrate 
from DestinationTable d 
join OriginTable o on o.SomeColumn = d.SomeColumn 
where o.bar <> 'foo' 
+1

where clause requried – Tanner

+1

죄송합니다. ;) –

+0

이 작업은 기본적으로 선택을 수행 한 다음 결과 데이터 집합의 한 열에서 다른 열로 데이터를 복사하는 것과 같이 작동합니다. – groovejet

4

세트 기반 솔루션이 최선의 선택입니다. 이 경우 UPDATEJOIN을 사용할 수 있습니다. 이 행이 단순히 행을 업데이트하는 것이고 데이터를 삽입하지 않는다는 것을 알아야합니다.

UPDATE D 
SET D.Value = O.dataToMigrate 
FROM DestinationTable D 
INNER JOIN OriginTable O 
    ON D.Id = O.Id 
WHERE O.bar <> 'foo' 
4

이것은 내가 알 수있는 한 UPDATE 문을 사용하여 수행 할 수 있습니다.

메모리에서이지만, 다음과 같이 것 :

UPDATE dt 
SET Value = ot.dataToMigrate 
FROM DestinationTable dt 
    JOIN OriginTable ot 
     ON dt.Id = ot.Id 
WHERE bar <> 'foo' 

구문은 정확히 잘 수있다,하지만 두 테이블을 조인하고 다른 하나를 업데이트하는 것은 매우 가능하다.

관련 문제