SQL Server:在递增id时逐个更新多行
我对SQL还很陌生,我想过了一段时间后我就可以自如地使用它了,但它仍然很难。我正在尝试增加ID。我知道我可以使用自动递增,但在这种情况下,id与几个类别有关系,所以它必须以不同的数字开始,所以我不能这样做 该表如下所示:SQL Server:在递增id时逐个更新多行,sql,sql-server,Sql,Sql Server,我对SQL还很陌生,我想过了一段时间后我就可以自如地使用它了,但它仍然很难。我正在尝试增加ID。我知道我可以使用自动递增,但在这种情况下,id与几个类别有关系,所以它必须以不同的数字开始,所以我不能这样做 该表如下所示: id category ---------------- 1000 1 1000 1 ... 2000 2 2000 2 ... 我想做到: id category ------------------ 1000 1 1001 1 10
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的方式得到递增的max id呢?谢谢。您可以改用
行号()
函数:
select *,
concat(cid, row_number() over (partition by id order by category)-1) as NewId
from style s;
在缺少实际样本数据的情况下,这是一个伪sql,但是,类似于
UPDATE YT
----SELECT NULL as Ihave no context of other fields in your table
SET id = id + ROW_NUMBER() OVER (PARTITION BY category ORDER BY (SELECT NULL)) - 1
FROM YourTable YT;
您可以使用游标来迭代表。这里有一个指向MSDN文档的链接,说明如何声明游标,并使用它来迭代表()为自定义id和类别添加一个单独的列,然后自己维护它。索引它的搜索速度。让数据库负责自动递增ID。试图与数据库争夺谁维护表关系ID将以眼泪告终-/使用
光标
将是一种糟糕的方法。它可能非常慢。所以,如果任何1个Id
的Category
都有1000多个值,该怎么办?@Larnu True,我刚才在回答他的问题:“我如何才能1乘1,这样它才能真正得到递增的max Id”