Comment utiliser ROW NUMBER () dans la clause UPDATE? [dupliquer]
cette question a déjà une réponse ici:
ROW_NUMBER()
est seulement utilisé dans la clause SELECT
dans MS SQL Server
, mais je veux l'utiliser pour la mise à jour comme suit:
Update MyTab Set MyNo = 123 + ROW_NUMBER() over (Order By ID)
Where a=b;
alors J'ai eu une erreur comme,
les fonctions fenêtrées ne peuvent apparaître dans le SELECT ou L'ordre que par des clauses.
comment utiliser ROW_NUMBER()
dans UPDATE
clause?
26
demandé sur
M.S.
2013-10-01 23:49:41
3 réponses
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;
Résultats:
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
24
répondu
Bogdan Sahlean
2013-10-02 03:22:04
vous pouvez utiliser un 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;
45
répondu
Kevin Suchlicki
2013-10-01 19:57:01
je voudrais utiliser une expression de table commune
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
vous pouvez tester cette première bien que en faisant un
select * from myUpdate
5
répondu
Nathan Koop
2013-10-01 19:58:51