You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 07:15:36