根据每个where子句

时间:2016-01-12 21:27:45

标签: sql sql-server-2012

我喜欢根据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<>'')

1 个答案:

答案 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;