Sql server 如何在UPDATE子句中使用行号()?

Sql server 如何在UPDATE子句中使用行号()?,sql-server,tsql,sql-server-2008-r2,window-functions,Sql Server,Tsql,Sql Server 2008 R2,Window Functions,ROW_NUMBER仅用于MS SQL Server中的SELECT子句,但我想将其用于更新,如下所示: Update MyTab Set MyNo = 123 + ROW_NUMBER() over (Order By ID) Where a=b; 然后我得到了这样的错误 窗口函数只能出现在SELECT或ORDER BY子句中 如何使用UPDATE子句中的行数?您可以使用CTE: ;WITH RowNbrs AS ( SELECT ID , ROW_NUM

ROW_NUMBER仅用于MS SQL Server中的SELECT子句,但我想将其用于更新,如下所示:

Update MyTab Set MyNo = 123 +  ROW_NUMBER() over (Order By ID)
Where a=b;
然后我得到了这样的错误

窗口函数只能出现在SELECT或ORDER BY子句中

如何使用UPDATE子句中的行数?

您可以使用CTE:

;WITH RowNbrs AS (
    SELECT  ID
            , ROW_NUMBER() OVER (ORDER BY ID) AS RowNbr
    FROM    MyTab
    WHERE   a = b
)
UPDATE  t 
SET     t.MyNo = 123 +  r.RowNbr
FROM    MyTab t
        JOIN RowNbrs r ON t.ID = r.ID;
我会用CTE

WITH myUpdate ( myRowNumber )
AS
( 
    SELECT ROW_NUMBER() over (order by ID) As myRowNumber
    FROM MyTab
    WHERE a = b
 ) 

update MyTab 
set MyNo = 123 + myRowNumber
FROM myUpdate
不过,您可以先通过执行

select * from myUpdate
结果:

ID          MyNum       ColA        ColB
----------- ----------- ----------- -----------
2           1           11          11
4           2           22          22
6           NULL        NULL        NULL
8           NULL        33          NULL
10          NULL        NULL        44
12          NULL        55          66

在我的案例中,需要Dup of Join来完成我的查询,其中myUpdate id为myRowNumber,SELECT id为myRowNumber,order by id上的ROW_NUMBER为AspNetUsers的myRowNumber,其中UserType='Customer'update AspNetUsers set EmployeeCode=FORMATmyRowNumber,'00000'来自myUpdate left在u.id=myUpdate.ids加入AspNetUsers u节省了我的一天!谢谢
ID          MyNum       ColA        ColB
----------- ----------- ----------- -----------
2           1           11          11
4           2           22          22
6           NULL        NULL        NULL
8           NULL        33          NULL
10          NULL        NULL        44
12          NULL        55          66