位置: 编程技术 - 正文

用一句SQL解决SQL中断号问题 推荐(sqlyog语句)

编辑:rootadmin
名词解释  断号:比如,连续生成的编号,由于某种操作(通常为删除)后,产生不连续的编号,我们将这种不连续的编号称为断号。  例如,数据库中有一个字段叫合同编号,正常格式为_(表示年6月的第个合同),那么它前面的一个合同编号应该为_,后面的一个应该为_,当我们删除了合同_,就会出现_后面直接是_,这种情况下叫做断号。  传统系统中,像这种断号的情况很常见,比如数据库中的列为递增类型,当删除某行后,就会出现断号,而经常有客户提出需求,不希望出现断号的情况。解决方案通常就是,如果删除了某行数据,那么下次新增时,应该将断号补齐。 问题很简单,解决方法也很简单: 写一个C#方法,用来获取下一条记录的编号: 当然,这段代码也可以简写为以下形式: 测试代码如下: 运行结果如下:   前几天再次接触到这个问题,由于特殊的场景,再用C#反而会增加开发难度,如果想法通过SQL来解决问题:建表及制造数据SQL: 然后再同样删除第3、7、8行的数据,使这三行产生断号: DELETE FROM testTable WHERE Code in (3,7,8) 分析:要产生连号,即是要让Code这一列上连续的,也就是说每每两行之间的Code相差为1 由于Code是从1开始的(从其他数字开始的也是同理计算),即按Code从小到大排序号,Code为1的行应该为第一行,Code为的行应该在第行,即Code=行号, 既然这样,预览数据如下: 删除数据前的排号:      删除数据后的排号:  很明显发现,删除数据前,Code=行号,删除后Code不等于等号,而删除数据后的第一行Code不等于行号的数据,即是第一个出现断号的数据,即为我们想要查询的结果。  如是,如果数据库中有断号,则可以用以下语句直接查出断号:    结果立现。  这段代码还存在一个缺陷,即此方法专用来处理有断号的情况,如果不存在断号时,应该返回Max(RowNumber)+1。正确代码应该如下:   至此,我今天要讲的基本结束,此处借用了SQL的方法row_number ,其他数据库中也有类似的方法,大家可以自己摸索。  问题完全解决了吗?大家可以发现,以上出现了断号的情况,都是从小开始补号,比如3,7,8同时为断号,则补3。假如有客户要求从大号开始补号(即3,7,8断号时,补8呢),怎么处理?  前面两种通过C#方法操作的就很容易了,这里主要说一下通过SQL处理的方法:    那么再扩展一下,如何查出所有的断号呢?  要实现这个功能,一般想法是将当前Code与上一行的Code进行对比,但由于可能出现连续断号的情况(例如删除了 Code=7、8、9三行)。此时该如何处理呢?  我的解决方法是,假如max(code)等于,那么我先构造出行(怎样构造?数据库中随便找个行数大于的表,select top 就行了,如果没有行数大于的表,就联合查询构造出行吧),再用这一行的行号分别和code进行对比,如果存在Code<>行号的,即该处为断裂号,示例如下:假设系统中已经存在另一张表A,它的总行数>max(Code),【注:当然,如果不存在这样的表,也可以通过select 的方式构造出来】,查询所有断号的SQL如下:      至此,问题结束,以上代码的优点在于只用一个SQL语句,而不需要用存储过程、用户自定义函数或C#中的循环,就可以解决各种断号问题,当然为了性能方面还可以再做优化,在此不列出。

推荐整理分享用一句SQL解决SQL中断号问题 推荐(sqlyog语句),希望有所帮助,仅作参考,欢迎阅读内容。

用一句SQL解决SQL中断号问题 推荐(sqlyog语句)

文章相关热门搜索词:sql能解决什么问题,如何用sql语言进行数据处理,运用sql,sql语句解题思路,运用sql,运用sql,运用sql,sql写一句话,内容如对您有帮助,希望把文章链接给更多的朋友!

数据库更新Sqlserver脚本总结 表复制:1.INSERTINTOSELECT语句语句形式为:InsertintoTable2(field1,field2,...)selectvalue1,value2,...fromTable1要求目标表Table2必须存在,由于目标表Table2已经存在,所

MySQL 多表查询实现分析 我们继续使用前面的例子。前面建立的表中包含了员工的一些基本信息,如姓名、性别、出生日期、出生地。我们再创建一个表,该表用于描述员工所

针对SQL 的分页存储过程代码分享 ------------------------------------------------------针对SQL的分页存储过程--Time:-9-----------------------------------------------------ALTERPROCEDURE[dbo].[uoSp_RecordPager]--要

标签: sqlyog语句

本文链接地址:https://www.jiuchutong.com/biancheng/349232.html 转载请保留说明!

上一篇:SQLServer 连接失败错误故障的分析与排除(sqlserver连接失败怎么办)

下一篇:深入浅析MySQL COLUMNS分区(mysql column is ambiguous)

  • 厂房出租开发票怎么交税
  • 销售软件系统退货怎么退
  • 税务清算都交什么费用
  • 等线补交以前年度附加税会计分录是?
  • 增值税和购置税是一个东西吗
  • 对母公司的其他说法
  • 红字发票开错了已上传如何作废
  • 税务局未核定的印花税
  • 能从科目余额表入账吗
  • 合伙企业取得分红如何缴纳个人所得税
  • 其他综合收益为什么要结转
  • 售楼部垃圾桶
  • 股份支付为什么计入资本公积?
  • 银行罚息怎么入账
  • 二手房增值营业税
  • 旅游业营改增差额征税的会计核算怎么做?
  • 税号里的字母要大写还是小写
  • 企业的其他业务是什么
  • 存货跌价准备怎么计提
  • 稽查查补的税款可以享受即征即退吗
  • 社保缴费基数是什么意思,退休能拿多少
  • 鸿蒙系统大文件夹怎么调节大小
  • 预付业务招待费会计分录
  • 上市公司的股份可以转卖吗
  • 关闭密码保护共享后又自动开启
  • 公司向股东还款的会计分录
  • php数组函数 菜鸟
  • php __callstatic
  • phpswoole面试
  • 公司支付的工伤赔偿金可以税前扣除吗
  • vscode配置r
  • 结转生产成本的会计科目
  • 应收票据是借还是贷
  • 公司股权分红会计分录
  • 固定资产计提折旧的方法
  • 取得企业债券利息
  • 单位人才账户如何开立
  • 固定资产报废清理怎么做账务处理的
  • 超市小票可以作为证据吗
  • 什么叫动量交易
  • 材料可变现净值为什么不减去材料的销售费用
  • 金融企业买入返还股票
  • 应收款超过多久未收回可界定为损失
  • 跨月发票红字冲销有影响吗
  • 完税证明可以直接做账吗
  • 作废发票清单要回收吗
  • var文件是什么意思
  • 企业所得税税前扣除管理办法2018
  • 金税四期能监控到公户吗
  • 无票收入需要缴纳文化事业建设税吗
  • 简易计税怎么算增值税
  • 房地产企业怎么预缴企业所得税
  • 接待客户的住宿费进项税能否抵扣
  • 哪种情形的货物或者服务可以采用竞争性谈判方式采购
  • 2020年扶贫拨款
  • 专利补贴收入计入什么科目
  • 债权方的视同购进怎么会计处理?
  • 减免与抵免
  • 申请开立基本存款账户时,银行应按照
  • 收到合同预付款在账上怎么记
  • 工程分包总包产生的 税费由谁承担
  • centos调出命令行
  • “incorrect super block” FreeBSD挂载CDROM时报错误的解决方法
  • Win7 64位系统没有超级终端软件的解决方法
  • lhotkey.exe
  • win8.1应用商店
  • win7安装cad2022
  • iptables 增加
  • win10界面虚化模糊
  • react service worker
  • cocos2djs
  • 在node.js中想要监听事件
  • 3行程序搞定SVM分类-用JAVA程序调用LibSVM API 最简单的示例
  • 安卓退出界面
  • macos如何使用
  • shell脚本的实现
  • python文字检测
  • 重庆税务局发票作废
  • 陕西地税局电话号码
  • 出口退税预申报有疑点怎么办
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设