2013-12-17 76 views
1

我有大約600條記錄,我需要更新每個記錄上的四個字段。我有在Excel中的數據。我知道我可以做一個case語句爲每個字段像這樣更新多個記錄的多個字段

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...) 

但是,這將花費太長時間,寫每個字段和行每一種情況下(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 

您可以使用SqlBulkCopy加快加載數據到#TempTable更快。

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