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

如何使用序列号更新SQL表中的null值并解决序列不存在报错

问题原因

你收到new_val不存在的报错,是因为不能直接通过序列名获取序列值,需要调用对应数据库的序列取值函数才能拿到递增值。另外如果要保证NULL值按id从小到大依次赋值为1、2、3,需要在更新时指定排序规则。

解决方案

方案1:使用你已创建的序列(分数据库语法)

PostgreSQL

更新语句调整为:

UPDATE tb1
SET val = nextval('new_val')
WHERE val IS NULL
ORDER BY id;

Oracle

更新语句调整为:

UPDATE tb1
SET val = new_val.NEXTVAL
WHERE val IS NULL
ORDER BY id;

方案2:无需创建序列,用窗口函数实现(兼容性更强,支持所有含窗口函数的数据库)

无需提前创建序列,直接执行以下更新语句即可:

通用版本(PostgreSQL/SQL Server适用)

WITH null_rows AS (
    SELECT 
        id,
        ROW_NUMBER() OVER (ORDER BY id) AS rn
    FROM tb1
    WHERE val IS NULL
)
UPDATE tb1
SET val = null_rows.rn
FROM null_rows
WHERE tb1.id = null_rows.id;

MySQL 8.0+ 版本

UPDATE tb1 t1
JOIN (
    SELECT id, ROW_NUMBER() OVER (ORDER BY id) rn
    FROM tb1
    WHERE val IS NULL
) t2 ON t1.id = t2.id
SET t1.val = t2.rn;

内容的提问来源于stack exchange,提问作者user458

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 13:48:05