能否在UPDATE语句中使用LAG函数更新SQL表变量?
解决方案
要实现基于第一行数据更新后续行的需求,可以通过CTE(公共表表达式)结合窗口函数完成,具体代码如下:
DECLARE @varTable1 Table ( [id] [int], [field1] [decimal](18,4) ) INSERT INTO @varTable1 VALUES (1,20), (1,NULL), (1,NULL), (1,NULL) -- 生成行号并更新数据 WITH RankedRows AS ( SELECT *, ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS rn, FIRST_VALUE(field1) OVER (ORDER BY (SELECT NULL)) AS baseValue FROM @varTable1 ) UPDATE RankedRows SET id = rn, field1 = baseValue * rn SELECT * FROM @varTable1
逻辑说明
ROW_NUMBER()为每行生成唯一行号,ORDER BY (SELECT NULL)按数据插入顺序排序(若有明确排序字段,可替换为对应列)。FIRST_VALUE(field1)获取表中第一行的field1值作为计算基数。- 通过CTE更新表变量,将
id替换为行号,field1更新为基数乘以对应行号,最终得到预期的递增结果。
执行代码后,查询结果如下:
id field1 ----------- ----------- 1 20.0000 2 40.0000 3 60.0000 4 80.0000
内容的提问来源于stack exchange,提问作者Rod
相关产品推荐
相关产品推荐

