用一句SQL解决SQL中断号问题

发表于:2011-6-14 09:50

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:Deper    来源:51Testing软件测试网采编

  名词解释

  断号:比如,连续生成的编号,由于某种操作(通常为删除)后,产生不连续的编号,我们将这种不连续的编号称为断号。

  例如,数据库中有一个字段叫合同编号,正常格式为201106_011(表示2011年6月的第11个合同),那么它前面的一个合同编号应该为201106_10,后面的一个应该为201106_12,当我们删除了合同201106_011,就会出现201106_010后面直接是201106_012,这种情况下叫做断号。

  传统系统中,像这种断号的情况很常见,比如数据库中的列为递增类型,当删除某行后,就会出现断号,而经常有客户提出需求,不希望出现断号的情况。解决方案通常就是,如果删除了某行数据,那么下次新增时,应该将断号补齐。

  问题很简单,解决方法也很简单:

  写一个C#方法,用来获取下一条记录的编号:

  1. public static int GetNextNumber(int[] iNumList)  
  2. {  
  3.     int iTempStr = iNumList[0];   //用一个临时变量保存上一条记录的编号 
  4.     for (var i = 0; i < iNumList.Length - 1; i++)  
  5.     {  
  6.         if (i == 0)  
  7.         {  
  8.             iTempStr = iNumList[i];  
  9.         }  
  10.         //如果出现断号,则补齐断号 
  11.         if ((iNumList[i] - iTempStr) > 1)  
  12.         {  
  13.             return iTempStr + 1;  
  14.         }  
  15.         else 
  16.         {  
  17.             iTempStr = iNumList[i];  
  18.         }  
  19.         continue;  
  20.     }  
  21.     return iNumList[iNumList.Length - 1] + 1;  
  22. }

  当然,这段代码也可以简写为以下形式:

  1. public static int GetNextNumber3(int[] iNumList)  
  2. {  
  3.     for (int i = 0, j = 1; j < iNumList.Length - 1; i++, j++)  
  4.     {  
  5.          //如果出现断号,则补齐断号 
  6.          if ((iNumList[j] - iNumList[i]) > 1)  
  7.          {   
  8.               return iNumList[i] + 1;    
  9.          }     
  10.     }   
  11.     return iNumList[iNumList.Length - 1] + 1;   
  12. }

  测试代码如下:

  1. static void Main(string[] args)  
  2. {  
  3.     int[] iNums = { 1, 2, 4, 5, 6, 9, 10 };        //删除了数组中的3,7,8,即3,7,8为断号,下次新增时,希望产生的断号为3 
  4.     System.Console.WriteLine(BreakNumber.GetNextNumber3(iNums));  
  5.     System.Console.WriteLine(BreakNumber.GetNextNumber(iNums));  
  6. }

  运行结果如下:

31/3123>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号