Sql 基于每个where子句使用递增的值更新列

Sql 基于每个where子句使用递增的值更新列,sql,sql-server-2012,Sql,Sql Server 2012,我喜欢根据where条件用递增的值更新每一行 exp:从[Document]中选择ClientId,其中ClientId 10显示3个结果,然后我需要用1到3更新每个matterID 1 clientId有一个或多个MatterID,因此需要根据每个客户端的MatterID数量更新每个MatterID。如果客户端10持有3个matterID,则matterID将为1-2-3 不是:它没有正确更新,我得到的是这个示例的matterIDs ramdom编号不是1-39-39 存储过程 ** 运行程序

我喜欢根据where条件用递增的值更新每一行

exp:从[Document]中选择ClientId,其中ClientId 10显示3个结果,然后我需要用1到3更新每个matterID

1 clientId有一个或多个MatterID,因此需要根据每个客户端的MatterID数量更新每个MatterID。如果客户端10持有3个matterID,则matterID将为1-2-3

不是:它没有正确更新,我得到的是这个示例的matterIDs ramdom编号不是1-39-39

存储过程

**

运行程序

**
exec CustomIdProcedure从[Document]中选择ClientId,其中ClientId可以使用子查询或可更新的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;

如何传递@clienti还需要传递clientId对于每个结果,一个clientId有一个或多个matterID@user2577665 . . . 这将是存储过程内部的查询。更新不正确我正在获取此示例的MatterID ramdom编号不是1-39-39。@user2577665。您可以单独运行select查询。我发现很难想象,如果你正在查看的客户有39条匹配的记录,你怎么能从1-39中得到数字。
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;