sql-server – 如何在UPDATE子句中使用ROW_NUMBER()?

参见英文答案 > SQL Update with row_number()
ROW_NUMBER()仅用于MS SQL Server中的SELECT子句,但是我想将其用于如下更新:
Update MyTab Set MyNo = 123 +  ROW_NUMBER() over (Order By ID)
Where a=b;

那我就得错了,

Windowed functions can only appear in the SELECT or ORDER BY clauses.

如何在UPDATE子句中使用ROW_NUMBER()?

解决方法

DECLARE @MyTable TABLE
(
    ID INT IDENTITY(2,2) PRIMARY KEY,MyNum INT,ColA INT,ColB INT
);

INSERT  @MyTable (ColA,ColB)
SELECT 11,11 UNION ALL
SELECT 22,22 UNION ALL
SELECT NULL,NULL UNION ALL
SELECT 33,NULL UNION ALL
SELECT NULL,44 UNION ALL
SELECT 55,66;

UPDATE  UpdateTarget
SET     MyNum = RowNum
FROM
(
    SELECT  x.MyNum,ROW_NUMBER() OVER(ORDER BY x.ID) AS RowNum
    FROM    @MyTable x
    WHERE   x.ColA = x.ColB
) AS UpdateTarget;

SELECT * FROM @MyTable;

结果:

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

相关文章

本篇内容主要讲解“sqlalchemy的常用数据类型怎么使用”,感...
今天小编给大家分享一下sqlServer实现分页查询的方式有哪些的...
这篇文章主要介绍“sqlmap之osshell怎么使用”,在日常操作中...
本篇内容介绍了“SQL注入的知识点有哪些”的有关知识,在实际...
1. mssql权限sa权限:数据库操作,文件管理,命令执行,注册...
sql执行计划如何查看?在SPL庞大的数据中我们不知道如何查看...