sql 复杂自动编号错误批量修改方案
2016-01-15 17:58
387 查看
[一篮饭特稀原创,转载请注明出自/article/6222999.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)
执行(批量脚本)实现数据重置。
相关文章推荐
- sql:数据定义语言ddl
- NoSQL初探之人人都爱Redis:(3)使用Redis作为消息队列服务场景应用案例
- 数据库的设计
- sql:数据操作语言dml
- MySQLdb模块用法
- mysql连接查询和in的效率取舍
- oracle数据库中有clob字段表结构数据的分组查询
- Oracle数据库中外键的相关操作整理
- 彻底删除mysql-尤其是最后最后一步出现问题
- mysql约束
- MySQL的FROM_UNIXTIME()和UNIX_TIMESTAMP()函数的区别
- oracle 和MySQL 查询的时候日期的一些处理方法
- Redis Manager
- oracle中sqlldr工具使用时注意事项
- SQL执行效率和性能测试方法总结
- 在Oracle数据库中添加外键约束的方法详解
- mysql批量生成修改表和列注释语句
- oracle在敏感操作前创建还原点
- MySQL 5.6 root密码丢失,使用mysqld --skip-grant-tables
- SQL语法结构