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

Sah*_*lva 6 sql t-sql sql-server

我有一个包含数据集的表。表数据如下。

\n\n
ID | Name | Age\n----------------\n1  |  A   | 24\n2  |  B   | 25\n3  |  C   | 30\n4  |  D   | 46\n5  |  E   | 35\n6  |  F   | 26\n7  |  G   | 30\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
ID | Name | Age\n----------------\n1  |  A   | 24\n2  |  B   | 22\n3  |  C   | 35\n4  |  D   | 50\n5  |  E   | 27\n6  |  F   | 26\n7  |  G   | 30 \n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

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

\n\n
\n\n

我找到了解决方案,但无法将其添加为答案。所以我决定编辑我自己的问题并给出答案。请参考以下网址了解更多信息:

\n\n

www.stackoverflow.com/questions/16932526/\xe2\x80\xa6

\n\n
           UPDATE e \n           SET age = t.age \n           FROM table e \n           JOIN ( VALUES \n           (1, 26), \n           (2, 30), \n           (3, 35) ) \n           t (id, age) ON t.id = e.id \n
Run Code Online (Sandbox Code Playgroud)\n

i48*_*486 5

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
Run Code Online (Sandbox Code Playgroud)

看起来“愚蠢”,但它是单个查询。


No *_*ame 1

你应该参考更新声明。现在有很多方法可以实现你想要的,例如,你可以在这里看到。一个简单的例子是:

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);
Run Code Online (Sandbox Code Playgroud)

有关案例的更多阅读,请访问此处