sql - SQL如何批量更新
问题描述
所以我面临着我有一堆空白数据的情况。我说 1000 行,我需要为这些行分配各种数据。假设我有一个名为“Cost”的列,DBName 是“Parts”。
我需要做的是,有 150 个条目,成本为 10,250 个条目,成本为 20,300 个条目,成本为 30,300 个条目,成本为 40。
我不想重新更新任何值。因此,在以 10 的成本更新前 150 名之后,我希望将其排除在剩余结果之外。
完成这样的事情的一般语法或策略是什么?
解决方案
显而易见的解决方案是使用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
推荐阅读
- javascript - Jquery 根据单选按钮和选择选项显示和隐藏 div
- java - 两个片段不应该直接通信
- ios - 为什么我的新 swift 文件缺少代码?
- npm - 使用 sapper 在 Svelte 项目中配置输出目录
- azure-service-fabric - Azure Service Fabric 无状态 Web API + API 管理 + B2C 身份验证教程
- java - 如何将用户定义的(动态)数据输入到数组中?
- r - 根据数据更改 geom_point 颜色 (R)
- r - ggplot2 中带有 geom_text_contour 的标签上的小数点太多
- wordpress - 我在 wordpress 中遇到混合内容错误
- linux - 如何将矩阵中的空白值替换为0