首页 > 解决方案 > SQL如何批量更新

问题描述

所以我面临着我有一堆空白数据的情况。我说 1000 行,我需要为这些行分配各种数据。假设我有一个名为“Cost”的列,DBName 是“Parts”。

我需要做的是,有 150 个条目,成本为 10,250 个条目,成本为 20,300 个条目,成本为 30,300 个条目,成本为 40。

我不想重新更新任何值。因此,在以 10 的成本更新前 150 名之后,我希望将其排除在剩余结果之外。

完成这样的事情的一般语法或策略是什么?

标签: sqlssms

解决方案


显而易见的解决方案是使用ROW_NUMBER函数按照您需要的任何排序标准来索引您的记录。下面是一个示例,但是有很多方法可以编写类似的行为。

DECLARE @exampleTable TABLE (Id UNIQUEIDENTIFIER, Cost DECIMAL(10, 2))

;WITH numberedRows AS (
  SELECT Id, ROW_NUMBER() OVER (ORDER BY Id ASC) RowNum -- ordering criteria go in here 
  FROM @exampleTable
)
UPDATE e
SET e.Cost = CASE
               WHEN n.RowNum <= 150 THEN 10
               WHEN n.RowNum <= 400 THEN 20
               WHEN n.RowNum <= 700 THEN 30
               WHEN n.RowNum <= 1000 THEN 40
               ELSE 0 -- default cost for remaining items here
             END
FROM @exampleTable e
INNER JOIN numberedRows n ON n.Id = e.Id

推荐阅读