如何在SQL Server中进行批量更新

时间:2014-12-04 09:24:39

标签: sql sql-server tsql

我有一组包含数据的表。表格数据如下。

ID | Name | Age
----------------
1  |  A   | 24
2  |  B   | 25
3  |  C   | 30
4  |  D   | 46
5  |  E   | 35
6  |  F   | 26
7  |  G   | 30

现在,我想要的是更新某些ID的年龄列,以便最终结果如下。

ID | Name | Age
----------------
1  |  A   | 24
2  |  B   | 22
3  |  C   | 35
4  |  D   | 50
5  |  E   | 27
6  |  F   | 26
7  |  G   | 30 

我更新了ID = 2,3,4,5

的行

如何通过单个T-SQL查询实现此结果?这只是一个示例表。在实际情况中,它是一个包含超过1500个数据的表,因此它需要花费大量时间来单独更新行。


我找到了解决方案,但我无法将其添加为答案。所以我决定编辑自己的问题并提出答案。有关详细信息,请参阅以下网址:

www.stackoverflow.com/questions/16932526 / ...

           UPDATE e 
           SET age = t.age 
           FROM table e 
           JOIN ( VALUES 
           (1, 26), 
           (2, 30), 
           (3, 35) ) 
           t (id, age) ON t.id = e.id 

4 个答案:

答案 0 :(得分:2)

你应该依靠update statements。现在有很多方法可以达到你想要的效果,例如,你可以看到here。一个简单的例子是:

UPDATE mytable SET
    Age= CASE WHEN id=2 THEN 22 WHEN id=3 THEN 35  WHEN id=4 THEN 50 WHEN id=5 THEN 27 END
WHERE id IN (2, 3, 4, 5);

有关案例的更多阅读,请转到here

答案 1 :(得分:1)

BEGIN TRAN
UPDATE mytable SET age=99 WHERE id=2
UPDATE mytable SET age=99 WHERE id=3
UPDATE mytable SET age=99 WHERE id=4
UPDATE mytable SET age=99 WHERE id=5
COMMIT TRAN

看起来“愚蠢”,但这是单一查询。

答案 2 :(得分:1)

以下脚本应该可以解决问题:

UPDATE TABLENAME
SET Age = CASE WHEN Age = 25 THEN 22
             WHEN Age = 30 THEN 35
             WHEN Age = 46 THEN 50
             WHEN Age = 35 THEN 27
             END
WHERE ID IN (2,3,4,5)

希望这有帮助

答案 3 :(得分:1)

加入更新将是我的选择:

UPDATE T1
SET T1.AGE = T2.AGE
FROM T1
INNER JOIN (SELECT 2 AS ID, 22 AS AGE UNION
            SELECT 3, 35 UNION
            SELECT 4, 50 UNION
            SELECT 5, 27) AS T2
   ON T1.ID = T2.ID

如果他们为您提供了要更新的ID列表和年龄,您可以使用公式轻松生成excel中的内部选择联合并将其放在那里。

希望这有帮助。