我有一张如下表:
Newid1 a b c
1 null 40 50
2 null 45 55
3 null 46 56
4 null 47 57
5 null 48 58
Run Code Online (Sandbox Code Playgroud)
现在我想通过将 C 列值更新到其中来更新列中的值(例如:50 到第二行,55 到第三行,56 到第四行......)。如何使用 WHILE 命令执行此操作。提前谢谢大家。
它可以在一个基于集合的操作中完成,当您一遍又一遍地更新行时,
使用 WHILE 可能会引发“万圣节问题”。
使用 LAG 的 SQL Server 2012 更容易
DECLARE @t TABLE
(
Newid1 int
, a int NULL
, b int
, c int
);
INSERT INTO @t VALUES(1, NULL, 40, 50)
,(2, NULL, 45, 55) ,(3, NULL, 46, 56)
,(4, NULL, 47, 57) ,(5, NULL, 48, 58);
-- SQL Server 2012
WITH t AS
(
SELECT a, LAG(c) OVER (ORDER BY Newid1) AS nextC
FROM @t
)
UPDATE t SET a = nextC;
SELECT * FROm @t;
Run Code Online (Sandbox Code Playgroud)
但是对于 SQL Server 2005+
DECLARE @t TABLE
(
Newid1 int
, a int NULL
, b int
, c int
);
-- SQL Server 2005+
WITH t AS
(
SELECT Newid1, ROW_NUMBER() OVER (ORDER BY Newid1) +1 AS nextID, a, c
FROM @t
)
UPDATE t1
SET a = t2.c
FROM
t AS t1
JOIN
t AS t2 ON t1.Newid1 = t2.nextID;
SELECT * FROM @t;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8768 次 |
| 最近记录: |