如何批量更新SQL Server表中bill_no字段从1开始重新编号?
批量将SQL Server表的bill_no字段从1开始重新编号
如果要一次性完成字段从1开始的连续编号,不管是覆盖全表还是仅替换193及后续序列,都可以用ROW_NUMBER()窗口函数结合CTE(公共表表达式)实现,效率远高于逐条更新。
场景1:给全表bill_no从1重新编号
如果需要所有行的bill_no都从1开始连续排列,先确定一个唯一排序依据(比如主键、记录创建时间,保证顺序稳定),执行以下语句:
WITH NumberedRecords AS ( SELECT bill_no, -- 替换ORDER BY后的字段为你实际需要的排序依据,比如create_time或主键id ROW_NUMBER() OVER (ORDER BY id) AS new_bill_no FROM tbl_sales_record ) UPDATE NumberedRecords SET bill_no = new_bill_no;
场景2:仅替换原bill_no从193开始的序列
如果只需要把原有值为193、194、195...的行改成1、2、3...,添加WHERE条件筛选目标行即可:
WITH NumberedRecords AS ( SELECT bill_no, -- 按原有bill_no排序,保证193对应1,194对应2,以此类推 ROW_NUMBER() OVER (ORDER BY bill_no) AS new_bill_no FROM tbl_sales_record WHERE bill_no >= 193 ) UPDATE NumberedRecords SET bill_no = new_bill_no;
注意事项
- 执行前务必备份数据,避免误操作导致数据丢失。
- 如果bill_no是主键或有唯一约束,确保ORDER BY的字段能生成唯一排序,避免新编号重复。
- 若表存在外键关联bill_no,需先禁用外键约束或同步更新关联表,否则更新会失败。
内容的提问来源于stack exchange,提问作者user 2022
相关产品推荐
相关产品推荐

