8

我正在尝试更新表中的列以使用值 1 到(由记录数决定的最大数量)。

我不知道我的解释是否正确,所以我用我要更新的数据设置了一个 SQLFiddle。

SQL 小提琴

我想将版本列设置为 1 到(最大数量)。有没有办法重写这个查询来缩放版本号?如,我希望第一条记录使用 1,第二条记录使用 2,依此类推...

UPDATE Documents
SET Version = 1
4

3 回答 3

4

您可以使用 CTE 且无需连接来执行此操作:

with RankedDocument as
(
  select *
    , rn = row_number() over (order by ID)
  from Documents
)
update RankedDocument
set Version = rn

SQL Fiddle 与演示

于 2013-05-30T16:24:22.553 回答
3

据我所知,您希望每条记录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

如果我理解正确的话..

于 2013-05-30T16:21:31.383 回答
1

试试这个:

;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 ) 更改为您需要的订单。

于 2013-05-30T16:22:48.083 回答