更新多个记录的多个字段

时间:2013-12-17 17:41:08

标签: sql sql-server-2008 ssms

我有大约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...)

但这需要太长时间,为每个字段和行编写每个案例(4次)。也有太多错误的空间。

有更有效的方法吗?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

您可以创建一个临时表,将数据插入其中,然后在select的更新中使用该临时表,如下所示:

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的速度。