首页 > 解决方案 > SQL Server:在递增 id 的同时一一更新多行

问题描述

我对 SQL 还很陌生,我以为我用了一段时间就习惯了,但它仍然很难。我正在尝试增加 ID。我知道我可以使用自动增量,但在这种情况下,id 与多个类别有关系,所以它必须以不同的数字开头,所以我不能这样做。

该表如下所示:

id     category
----------------
1000   1
1000   1
...
2000   2
2000   2
...

我想做到:

id     category
------------------
1000   1
1001   1
1002   1
...
2000   2
2001   2
...

我试过了:

UPDATE T1
SET id = CASE 
             WHEN EXISTS (SELECT id FROM STYLE WHERE T1.id = id)
                THEN (SELECT MAX(CAST(id AS INT)) + 1  
                      FROM STYLE 
                      WHERE category = T1.category) 
         END
FROM STYLE T1 
WHERE idStyle = idStyle

但它只是将 1 添加到所有行。我怎么能 1 乘 1 所以它实际上可以获得递增的最大 id?谢谢你。

标签: sqlsql-server

解决方案


您可以改用row_number()函数:

select *, 
       concat(cid, row_number() over (partition by id order by category)-1) as NewId
from style s;

推荐阅读