我喜欢根据where条件使用递增值更新每一行。
exp:从[Document]中选择ClientId,其中ClientId 10 显示3个结果,然后我需要用1到3更新每个matterID。
1 clientId有一个或多个MatterID,因此需要根据每个客户端的matterID数更新每个matterID。如果客户10持有3个物料ID,则物料ID将为1 - 2 - 3
不:它没有正确更新我得到的例子ramdom号码不是1-39-39。
存储过程
Alter PROCEDURE dbo.CustomIdProcedure
@clientId varchar(255) = ''
AS
Begin
update e set MatterId = rn from (select * ,rn=row_number() over (order by id) from [Document] where ClientId = @clientId ) e
END
**
运行程序
** exec CustomIdProcedure(从[Document]中选择ClientId,其中ClientId<>'')
答案 0 :(得分:0)
您可以使用子查询或可更新的CTE:
with toupdate as (
select d.*,
row_number() over (partition by clientid order by id) as rn
from [Document] d
where ClientId = @clientid
)
update toupdate
set MatterId = rn;