我正在尝试更新表中的列以使用值 1 到(由记录数决定的最大数量)。
我不知道我的解释是否正确,所以我用我要更新的数据设置了一个 SQLFiddle。
我想将版本列设置为 1 到(最大数量)。有没有办法重写这个查询来缩放版本号?如,我希望第一条记录使用 1,第二条记录使用 2,依此类推...
UPDATE Documents
SET Version = 1
我正在尝试更新表中的列以使用值 1 到(由记录数决定的最大数量)。
我不知道我的解释是否正确,所以我用我要更新的数据设置了一个 SQLFiddle。
我想将版本列设置为 1 到(最大数量)。有没有办法重写这个查询来缩放版本号?如,我希望第一条记录使用 1,第二条记录使用 2,依此类推...
UPDATE Documents
SET Version = 1
您可以使用 CTE 且无需连接来执行此操作:
with RankedDocument as
(
select *
, rn = row_number() over (order by ID)
from Documents
)
update RankedDocument
set Version = rn
据我所知,您希望每条记录Documents
都有一个version
数字,该数字是从 1 ..... N 移动的数字。
您可以使用临时表和ROW_NUMBER
技术来获取增量version
,然后UPDATE
将其返回到原始表。
CREATE TABLE #Temp (ID int, Version int)
INSERT INTO #Temp (ID, Version)
SELECT ID, ROW_NUMBER() OVER (ORDER BY ID ASC)
FROM Documents
UPDATE Doc
SET Version = TT.Version
FROM Documents AS Doc INNER JOIN #Temp AS TT ON Doc.ID = TT.ID
DROP TABLE #Temp
如果我理解正确的话..
试试这个:
;WITH list AS (
SELECT
ID
, Version = ROW_NUMBER() OVER( ORDER BY VersionID ASC )
FROM Documents
)
UPDATE d SET
d.Version = x.Version
FROM Documents AS d
INNER JOIN list as x ON d.ID=x.ID
SELECT * FROM Documents
您可以将订单 ( ORDER BY VersionID ASC ) 更改为您需要的订单。