sql 复杂自动编号错误批量修改方案

[一篮饭特稀原创,转载请注明出自http://www.cnblogs.com/wanghafan/p/5133953.html

前提:自动编号为18位,前4位是年份,中间10位是XXXX,最后四位是0001-9999的自动编号。

问题:某天发现2016年自动编号后四位从0001-0081后变为7328-8530,出现编号错乱问题(原因未知待查)。但数据需要马上批量重置,否则后续编号将继续错误。

方案:截取2016年份的前14位拼接后4位正确自动编号。实现如下:

--查询2016年我司项目编号,查看后四位是否正确
SELECT MyProjectNo,SUBSTRING(MyProjectNo,15,4) FROM dbo.ProjectT WHERE MyProjectNo LIKE ‘2016%‘ ORDER BY SUBSTRING(MyProjectNo,15,4)
--查询正确编号
SELECT MyProjectNo AS ‘错编号‘,SUBSTRING(MyProjectNo,15,4) AS ‘错编号后四位‘,LEFT(MyProjectNo,14) AS ‘对编号前14位‘,
right(‘0000‘+CAST(row_number() over (order by SUBSTRING(MyProjectNo,15,4))  AS VARCHAR(5)),4) AS ‘对编号后四位‘,
(LEFT(MyProjectNo,14)+right(‘0000‘+CAST(row_number() over (order by SUBSTRING(MyProjectNo,15,4))  AS VARCHAR(5)),4)) AS ‘对编号‘
FROM dbo.ProjectT
WHERE MyProjectNo LIKE ‘2016%‘
ORDER BY SUBSTRING(MyProjectNo,15,4)
--更新错误编号为正确(批量脚本)
SELECT ‘UPDATE dbo.ProjectT SET MyProjectNo=‘‘‘+
(LEFT(MyProjectNo,14)+right(‘0000‘+CAST(row_number() over (order by SUBSTRING(MyProjectNo,15,4))  AS VARCHAR(5)),4))
+‘‘‘ WHERE MyProjectNo=‘‘‘+MyProjectNo+‘‘‘‘
FROM dbo.ProjectT
WHERE MyProjectNo LIKE ‘2016%‘
ORDER BY SUBSTRING(MyProjectNo,15,4)

执行(批量脚本)实现数据重置。

时间: 2024-08-10 14:55:27

sql 复杂自动编号错误批量修改方案的相关文章

SQL两表关联查询&批量修改字段值

SQL关联查询&修改字段,正确范例如下: --批量修改报告单位名称&更新时间 --tt和tp两表关联查询,将符合条件的tt表中的principal字段更新到tp表的ruperson字段 merge into nhis34.t_publicplaces tp using standard.t_organization tt on (tt.orgcode = tp.r_orgcode and tp.create_time > '2015-05-07 00:00:00') when mat

linux '--stdin'错误 -批量修改密码

虚拟机:VMware虚拟机  系统:Linux ubuntu 4.4.0-31-generic #50~14.04.1-Ubuntu SMP Wed Jul 13 01:07:32 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux 看 <鸟哥的私房菜 -服务器架设篇>的时候,跟着书上敲指令的时候遇到了一个问题,批量添加用户和修改密码失败. shell命令如下: 使用 sh运行脚本的时候出现以下错误: 实测用户和用户组都已经添加成功,但是批量修改密码的时候出现错误,

Access中出现改变字段“自动编号”类型,不能再改回来!(已解决)

一次把access中的自增字段改成了数值,再改回自增时,提示:在表中输入了数据之后,则不能将任何字段数据类型改为"自动编号"错误,解决方法: 1.先右键表,设计,打开字段设计状态. 2.把你要改的自增字段删除掉. 3.在最后面新增一个字段(与删除的字段同名),设为自动编号即可. Access中出现改变字段"自动编号"类型,不能再改回来!(已解决)

MYSQL批量修改表前缀与表名sql语句

修改表名 ALTER TABLE 原表名 RENAME TO 新表名; 一句SQL语句只能修改一张表 show tables; 1. SELECT CONCAT( 'ALTER TABLE ', table_name, ' RENAME TO db_', substring(table_name, 4), ';' ) FROM information_schema. TABLES WHERE table_name LIKE 'ct%'; 批量复制一下到Notepad++中,只保留sql语句,再复

DeDeCMS后台批量修改替换sql语句大全

有时候后台文章内容.标题或者锚文本出错,需要修改批量修改,那么就需要用dedecms的sql语句进行批量修改了. 利用dedecms后台SQL命令行工具批量修改内容,路径和超链接等信息.语句 DEDECMS SQL命令批量替换1.更改文章中的内容update dede_addonarticle set body=replace(body,'原来的字符','替换后的字符')例子解释:update dede_addonarticle set body=replace(body,'软件下载','插件下

sql查询时增加自动编号

查询时加序号  a:没有主键的情形: Select   identity(int,1,1)   as   iid,*   into   #tmp   from   TableName   Select   *   from   #tmp   Drop   table   #tmp b:有主键的情形: Select   (Select   sum(1)   from   TableName   where   KeyField   <=   a.KeyField)   as   iid,*   f

SQL 主键 自动编号 主键自增

1.新建一数据表,里面有字段id,将id设为为主键 代码如下: create table tb(id int,constraint pkid primary key (id)) create table tb(id int primary key ) 2.新建一数据表,里面有字段id,将id设为主键且自动编号 代码如下: create table tb(id int identity(1,1),constraint pkid primary key (id)) create table tb(i

批量插入,批量修改的sql

sql 1  批量插入 <insert id="batchInsert" useGeneratedKeys="true" parameterType="java.util.List" > <selectKey resultType="long" keyProperty="id" order="AFTER"> SELECT LAST_INSERT_ID() <

DB2 SQL查询结果集自动编号、返回条数范围控制研究

DB2 SQL查询结果集自动编号.返回条数范围控制研究 摘要: DB2 SQL语句实现查询的记录自动编号.并根据编号进一步实现记录范围控制.分页查询. 环境: IBM DB2 Universal V9.1 Windows XP Professional 要求:写一个SQL语句,在查询结果中要显示出记录序号,这个序号是是根据记录顺序自动生成的. 测试初始化DB2 SQL脚本: drop table t_test; create table t_test (bs        bigint