2013-12-17 2 views
1

각 레코드에 4 개의 필드를 업데이트해야하는 레코드가 약 600 개 있습니다. 데이터가 Excel에 있습니다. 나는 그렇게여러 레코드에 대해 여러 필드 업데이트

UPDATE table 
SET field1 = 
    CASE 
     WHEN id = '123' THEN '2012-01-01' 
     WHEN id = '234' THEN '2012-07-01' 
      ... and so on... 
    END 
WHERE id IN ('123','234', ...and so on...) 

같이 각 필드에 대해 case 문을 수행 할 수 있습니다 알고하지만 각 필드 및 행에 대해 각각의 경우 (4 회)를 기록, 너무 오래 걸릴 것입니다. 오류가 너무 많습니다.

더 효율적인 방법이 있습니까?

답변

0

당신은, 임시 테이블을 만들고 그것으로 데이터를 삽입 한 다음 사용할 수 있습니다 이 같은 선택에서 업데이트에 그 임시 테이블은 :

CREATE TABLE #TempTable (id ..., field1 ..., ....) 
INSERT INTO #TempTable (id, field1, field2, ...) VALUES .... 

UPDATE 
    t 
SET 
    t.field1 = tmp.field1 
, t.field2 = tmp.field3 
FROM 
    MyTable t 
JOIN #TempTable tmp ON tmp.Id=t.id 

당신은 빨리 #TempTable로 데이터를로드 속도를 SqlBulkCopy를 사용할 수 있습니다.

1

가져 오기 준비 테이블에 데이터, 다음 UPDATE 문에서 목표 테이블과 스테이징 테이블 조인

UPDATE 
    T 
SET 
    Field1 = S.Field1, 
    Field2 = S.Field2, 
    ... 
FROM 
    TargetTable As T 
    INNER JOIN StagingTable As S 
    ON T.ID = S.ID 
관련 문제