0

我在 MS SQL 中有一个非常旧的表,它没有任何主键。它的结构是:

  • 文档
  • 位置
  • 材料
  • 数量
  • ..

我想改变它,并将“文档”和“位置”作为表格的键。当然,每个组合都应该是独一无二的。对于新记录,这已经完成,但对于旧记录,“位置”字段丢失。

我想要做的是更新任何现有记录,其中位置为 NULL 并带有递增数字(每次更改文档更改时,计数器应重新从 1 开始)

为了快速做到这一点,TSQL 语句应该是什么?

谢谢IT

4

1 回答 1

2

您可以使用 aCTE和排名功能ROW_NUMBER

WITH CTE AS(
    SELECT Document, Position, Material, Quantity,
        RN = ROW_NUMBER() OVER (PARTITION BY Document ORDER BY Document ASC)
    FROM dbo.TableName
)
UPDATE CTE SET POSITION = RN
WHERE Position IS NULL

如果您需要将订单更改ORDER BY Document ASC为有意义的特定逻辑。

如果您想查看将要更新的内容,只需将更新更改为SELECT * FROM CTE WHERE Position IS NULL. 这是公用表表达式 (CTE) 的好处之一。

于 2013-10-07T11:33:44.130 回答