精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

用一句SQL解決SQL中斷號問題

數(shù)據(jù)庫 SQL Server 數(shù)據(jù)庫運(yùn)維
斷號:比如,連續(xù)生成的編號,由于某種操作(通常為刪除)后,產(chǎn)生不連續(xù)的編號,我們將這種不連續(xù)的編號稱為斷號。

名詞解釋

斷號:比如,連續(xù)生成的編號,由于某種操作(通常為刪除)后,產(chǎn)生不連續(xù)的編號,我們將這種不連續(xù)的編號稱為斷號。

例如,數(shù)據(jù)庫中有一個字段叫合同編號,正常格式為201106_011(表示2011年6月的第11個合同),那么它前面的一個合同編號應(yīng)該為201106_10,后面的一個應(yīng)該為201106_12,當(dāng)我們刪除了合同201106_011,就會出現(xiàn)201106_010后面直接是201106_012,這種情況下叫做斷號。

傳統(tǒng)系統(tǒng)中,像這種斷號的情況很常見,比如數(shù)據(jù)庫中的列為遞增類型,當(dāng)刪除某行后,就會出現(xiàn)斷號,而經(jīng)常有客戶提出需求,不希望出現(xiàn)斷號的情況。解決方案通常就是,如果刪除了某行數(shù)據(jù),那么下次新增時,應(yīng)該將斷號補(bǔ)齊。

問題很簡單,解決方法也很簡單:

寫一個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.         //如果出現(xiàn)斷號,則補(bǔ)齊斷號  
  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;  

當(dāng)然,這段代碼也可以簡寫為以下形式:

  1. public static int GetNextNumber3(int[] iNumList)  
  2. {  
  3.     for (int i = 0, j = 1; j < iNumList.Length - 1; i++, j++)  
  4.     {  
  5.          //如果出現(xiàn)斷號,則補(bǔ)齊斷號  
  6.          if ((iNumList[j] - iNumList[i]) > 1)  
  7.          {   
  8.               return iNumList[i] + 1;    
  9.          }     
  10.     }   
  11.     return iNumList[iNumList.Length - 1] + 1;   

測試代碼如下:

  1. static void Main(string[] args)  
  2. {  
  3.     int[] iNums = { 1, 2, 4, 5, 6, 9, 10 };        //刪除了數(shù)組中的3,7,8,即3,7,8為斷號,下次新增時,希望產(chǎn)生的斷號為3  
  4.     System.Console.WriteLine(BreakNumber.GetNextNumber3(iNums));  
  5.     System.Console.WriteLine(BreakNumber.GetNextNumber(iNums));  

運(yùn)行結(jié)果如下:

 

前幾天再次接觸到這個問題,由于特殊的場景,再用C#反而會增加開發(fā)難度,如果想法通過SQL來解決問題:

建表及制造數(shù)據(jù)SQL:

  1. CREATE TABLE testTable  
  2. (  
  3.     Code int primary key 
  4. )  
  5. INSERT INTO testTable(Code) VALUES (1)  
  6. INSERT INTO testTable(Code) VALUES (2)  
  7. INSERT INTO testTable(Code) VALUES (3)  
  8. INSERT INTO testTable(Code) VALUES (4)  
  9. INSERT INTO testTable(Code) VALUES (5)  
  10. INSERT INTO testTable(Code) VALUES (6)  
  11. INSERT INTO testTable(Code) VALUES (7)  
  12. INSERT INTO testTable(Code) VALUES (8)  
  13. INSERT INTO testTable(Code) VALUES (9)  
  14. INSERT INTO testTable(Code) VALUES (10) 

然后再同樣刪除第3、7、8行的數(shù)據(jù),使這三行產(chǎn)生斷號:

  1. DELETE FROM testTable WHERE Code in (3,7,8) 

分析:要產(chǎn)生連號,即是要讓Code這一列上連續(xù)的,也就是說每每兩行之間的Code相差為1

由于Code是從1開始的(從其他數(shù)字開始的也是同理計算),即按Code從小到大排序號,Code為1的行應(yīng)該為第一行,Code為10的行應(yīng)該在第10行,即Code=行號,

既然這樣,預(yù)覽數(shù)據(jù)如下:

刪除數(shù)據(jù)前的排號:

 

刪除數(shù)據(jù)后的排號:

 

很明顯發(fā)現(xiàn),刪除數(shù)據(jù)前,Code=行號,刪除后Code不等于等號,而刪除數(shù)據(jù)后的第一行Code不等于行號的數(shù)據(jù),即是第一個出現(xiàn)斷號的數(shù)據(jù),即為我們想要查詢的結(jié)果。

如是,如果數(shù)據(jù)庫中有斷號,則可以用以下語句直接查出斷號:

 

結(jié)果立現(xiàn)。

這段代碼還存在一個缺陷,即此方法專用來處理有斷號的情況,如果不存在斷號時,應(yīng)該返回Max(RowNumber)+1。正確代碼應(yīng)該如下:

 

至此,我今天要講的基本結(jié)束,此處借用了SQL2005的方法row_number ,其他數(shù)據(jù)庫中也有類似的方法,大家可以自己摸索。

問題完全解決了嗎?大家可以發(fā)現(xiàn),以上出現(xiàn)了斷號的情況,都是從小開始補(bǔ)號,比如3,7,8同時為斷號,則補(bǔ)3。假如有客戶要求從大號開始補(bǔ)號(即3,7,8斷號時,補(bǔ)8呢),怎么處理?

前面兩種通過C#方法操作的就很容易了,這里主要說一下通過SQL處理的方法:

那么再擴(kuò)展一下,如何查出所有的斷號呢?

要實現(xiàn)這個功能,一般想法是將當(dāng)前Code與上一行的Code進(jìn)行對比,但由于可能出現(xiàn)連續(xù)斷號的情況(例如刪除了 Code=7、8、9三行)。此時該如何處理呢?

我的解決方法是,假如max(code)等于100,那么我先構(gòu)造出100行(怎樣構(gòu)造?數(shù)據(jù)庫中隨便找個行數(shù)大于100的表,select top 100就行了,如果沒有行數(shù)大于100的表,就聯(lián)合查詢構(gòu)造出100行吧),再用這一100行的行號分別和code進(jìn)行對比,如果存在Code<>行號的,即該處為斷裂號,示例如下:

假設(shè)系統(tǒng)中已經(jīng)存在另一張表A,它的總行數(shù)>max(Code),【注:當(dāng)然,如果不存在這樣的表,也可以通過select 的方式構(gòu)造出來】,

查詢所有斷號的SQL如下:

 

至此,問題結(jié)束,以上代碼的優(yōu)點(diǎn)在于只用一個SQL語句,而不需要用存儲過程、用戶自定義函數(shù)或C#中的循環(huán),就可以解決各種斷號問題,當(dāng)然為了性能方面還可以再做優(yōu)化,在此不列出。

原文鏈接:http://www.cnblogs.com/Deper/archive/2011/06/10/2073909.html

【編輯推薦】

 

  1. 淘寶海量數(shù)據(jù)庫之克服隨機(jī)IO難題
  2. 數(shù)據(jù)庫如何抵抗隨機(jī)IO的問題、方法與現(xiàn)實
  3. 一步一步設(shè)計你的數(shù)據(jù)庫之不可輕視的需求分析
  4. 養(yǎng)成一個SQL好習(xí)慣帶來一筆大財富
  5. 怎樣獲取某個數(shù)據(jù)庫的所有存儲過程SQL語句
責(zé)任編輯:艾婧 來源: Deper的博客
相關(guān)推薦

2019-11-15 18:00:18

MySQLSQL數(shù)據(jù)庫

2025-05-12 01:22:00

2010-03-29 11:55:12

無線上網(wǎng)報錯

2015-08-03 10:21:04

設(shè)計模式表達(dá)

2010-06-29 17:04:37

SQL Server警

2011-03-28 15:48:52

批量數(shù)據(jù)綁定

2011-03-24 10:24:45

批量數(shù)據(jù)綁定

2025-05-15 08:50:00

MQRPC架構(gòu)

2011-07-11 15:23:37

Sql DevelopOracle Migr

2010-11-09 17:09:23

SQL Server中

2009-03-10 18:10:12

LinuxUbuntu技巧

2012-02-09 09:41:22

2013-03-22 10:53:42

PyConPython

2022-08-01 10:01:11

JavaScript語言代碼庫

2020-11-27 09:57:11

Python代碼PyPy

2011-04-02 15:22:42

SQL server

2018-12-26 09:25:30

SQL ServerSQL語句數(shù)據(jù)庫

2010-06-30 14:15:08

SQL Server死

2021-12-17 08:55:26

Python微博機(jī)器人

2013-05-10 10:56:09

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

成人国产精品一区| 亚洲女人天堂成人av在线| 亚洲天堂第一区| 天天干视频在线| 日韩成人精品在线观看| 中文字幕av一区| 国产探花在线观看视频| 国产美女高潮在线观看| 国产欧美一二三区| 俄罗斯精品一区二区| 日本黄色一级视频| 黑丝一区二区| 综合国产在线视频| 亚洲 欧美 日韩在线| 福利精品在线| 丁香五六月婷婷久久激情| 制服诱惑一区| 久青草国产在线| 懂色av一区二区三区蜜臀| 国产精品视频公开费视频| 伊人365影院| 香蕉久久网站| 尤物yw午夜国产精品视频明星| 欧美一级大片免费看| 亚洲成av在线| 精品国产精品自拍| 欧美做暖暖视频| 色开心亚洲综合| 国产婷婷一区二区| 精品国产乱码久久久久久108| 国产日韩精品suv| 毛片av一区二区三区| 91国产高清在线| 久久无码精品丰满人妻| 99久久国产综合精品成人影院| 国产网站欧美日韩免费精品在线观看 | 国产欧美亚洲精品| 久久久久久91亚洲精品中文字幕| 欧美激情视频一区二区三区在线播放| 在线观看不卡av| 一道本在线观看| 亚洲免费专区| 国产丝袜精品视频| 亚洲精品视频大全| 噜噜噜狠狠夜夜躁精品仙踪林| 欧美一区二区在线播放| 黄色片在线免费| 欧美三区四区| 91久久精品一区二区| 国产成人久久婷婷精品流白浆| 9999精品成人免费毛片在线看 | 日韩av免费网址| 亚洲视频综合| 孩xxxx性bbbb欧美| 麻豆一区二区三区精品视频| 国模 一区 二区 三区| 欧美激情二区三区| 国产中文字幕免费| 99精品福利视频| 久久人人看视频| 国产无码精品久久久| 亚洲另类黄色| 欧美在线免费视频| 最近免费中文字幕大全免费版视频| 午夜亚洲性色视频| 欧美在线一级视频| 少妇一级淫片日本| 黄色小说综合网站| 51国产成人精品午夜福中文下载| 国产99999| 成人深夜福利app| 久久精品丝袜高跟鞋| 能在线看的av| 国产精品麻豆99久久久久久| 无码毛片aaa在线| 后进极品白嫩翘臀在线播放| 红桃av永久久久| 无码内射中文字幕岛国片| 成人性片免费| 精品久久久久久无| 性欧美丰满熟妇xxxx性仙踪林| 黑人操亚洲人| 操91在线视频| www.伊人久久| 九九**精品视频免费播放| av噜噜色噜噜久久| 日韩一二三四| 亚洲欧美aⅴ...| 青青草成人免费在线视频| 欧美黑人巨大xxxxx| 91精品国产一区二区人妖| 欧美做受高潮中文字幕| 香蕉久久夜色精品国产更新时间 | 欧美大片在线观看| a视频免费观看| 国产精品久久久久蜜臀| 97香蕉久久夜色精品国产| 无码人妻一区二区三区免费| 国产精品一区二区三区99| 欧美国产二区| 欧美6一10sex性hd| 欧洲av一区二区嗯嗯嗯啊| 久久久久中文字幕亚洲精品| 不卡中文一二三区| 国自在线精品视频| 国产精品久久影视| 久久女同性恋中文字幕| 波多野结衣av一区二区全免费观看| 免费日韩电影| 欧美精品一区二区高清在线观看| 色www亚洲国产阿娇yao| 国产精品久久久久毛片大屁完整版 | 免费成人毛片| 日韩成人在线电影网| 欧美在线视频第一页| 日韩二区在线观看| 精品亚洲一区二区三区四区五区高| 久操视频在线免费播放| 91久久精品日日躁夜夜躁欧美| 成人三级做爰av| 色喇叭免费久久综合网| 日本午夜人人精品| 婷婷五月综合激情| 亚洲影院理伦片| а 天堂 在线| 97久久夜色精品国产| 欧洲日韩成人av| 婷婷在线免费视频| 亚洲一区二区黄色| 丰满人妻一区二区三区53视频| 精品国内自产拍在线观看视频| 欧美一区二区三区精品电影| 亚洲精品18p| 一区二区三区在线视频观看| 性欧美在线视频| 日韩一区亚洲二区| 国产日韩精品电影| аⅴ资源新版在线天堂| 色94色欧美sute亚洲线路二| 久操视频免费看| 午夜在线精品| 老牛影视免费一区二区| 免费成人在线电影| 亚洲精品一区二区久| 色一情一乱一伦| 久久久久亚洲综合| 成人毛片一区二区| 欧美理伦片在线播放| 午夜精品在线视频| 天堂中文在线8| 欧美性高潮床叫视频 | 亚洲欧洲日韩在线| 日本不卡一区二区在线观看| 久久精品国产大片免费观看| 国产精自产拍久久久久久蜜| 在线观看国产原创自拍视频| 欧美精选一区二区| 欧美成人国产精品高潮| 国产精品77777竹菊影视小说| 欧美 亚洲 视频| 红杏成人性视频免费看| 97超碰国产精品女人人人爽| 男同在线观看| 欧美日韩你懂得| 欧美日韩精品在线观看视频| youjizz国产精品| 国产男女无遮挡| 精品日本12videosex| 成人免费福利视频| 欧美xxxx做受欧美88bbw| 亚洲国产精品中文| 久久久久久久久久一级| 国产精品久久久久影视| 精品人妻无码中文字幕18禁| 99热免费精品在线观看| 视频一区不卡| 欧美专区视频| 热草久综合在线| 麻豆视频在线免费观看| 亚洲国内高清视频| www.五月婷婷.com| 亚洲一区二区精品久久av| 偷拍女澡堂一区二区三区| 美女视频网站黄色亚洲| av在线免费观看国产| 一区二区三区日本久久久| 国产日韩欧美在线看| free性护士videos欧美| 中文国产成人精品| 欧美熟妇乱码在线一区| 欧美午夜精品一区二区三区| 久草免费在线视频观看| 久久久精品国产免大香伊| 日韩欧美中文视频| 亚洲一区二区三区高清| 精品一区二区成人免费视频 | 国产成人精品综合在线观看| 美女福利视频在线| 亚洲在线久久| 人偷久久久久久久偷女厕| 视频亚洲一区二区| 国产精品成人播放| av电影在线地址| 菠萝蜜影院一区二区免费| 瑟瑟在线观看| 精品久久人人做人人爽| 97精品久久人人爽人人爽| 亚洲国产一区二区在线播放| 久久日免费视频| 91免费看片在线观看| gogo亚洲国模私拍人体| 久久成人精品无人区| 日本精品www| 亚洲国产高清一区| dy888午夜| 日韩理论电影| 日韩精品极品视频在线观看免费| 国产成人aa在线观看网站站| 91免费看片网站| 国产成人免费| 国产精品爱啪在线线免费观看| 1区2区3区在线| 九九热最新视频//这里只有精品| 色多多视频在线观看| 国产亚洲人成网站在线观看 | xxxx欧美18另类的高清| 国产中文字幕在线看| 日韩国产高清视频在线| 亚洲精品国产精品乱码不卡| 欧美一区二区三区影视| 96亚洲精品久久久蜜桃| 欧美网站一区二区| 欧美一级做a爰片免费视频| 一本大道久久精品懂色aⅴ| 免费日韩一级片| 性做久久久久久| 日韩手机在线观看| 欧美日韩激情视频8区| 日韩av电影网址| 黑人巨大精品欧美一区二区三区| 日本午夜精品理论片a级app发布| 亚洲一区二区视频在线观看| 久久亚洲国产成人精品性色| 一区二区三区免费观看| 老妇女50岁三级| 亚洲综合视频网| 日韩精品久久久久久久| 午夜精品久久久久久久久| 日产欧产va高清| 日韩欧美高清视频| 精品视频一二三区| 在线观看av不卡| 在线黄色av网站| 91麻豆精品国产自产在线观看一区| 91午夜交换视频| 日韩一区二区三区电影在线观看| 国产极品999| 精品欧美久久久| 亚洲欧美日韩综合在线| 亚洲人成在线一二| 爱久久·www| 久久综合亚洲社区| 午夜羞羞小视频在线观看| 久久免费在线观看| 成人欧美magnet| 国产精品日韩在线观看| 国产精品久久久久久久久久辛辛| av一区二区三区在线观看| 欧美三级电影在线| 色噜噜狠狠一区二区三区| 天天做天天爱天天爽综合网| www.在线观看av| 午夜亚洲伦理| 午夜视频在线观| 99视频精品在线| 欧美人妻一区二区三区| 亚洲男同1069视频| 精品成人久久久| 欧美午夜片在线看| 亚洲精品第五页| 亚洲网站在线播放| a级网站在线播放| 91wwwcom在线观看| 亚洲欧美在线人成swag| 国产免费一区| 久久影视一区| 无码精品a∨在线观看中文| 日本v片在线高清不卡在线观看| 美女被艹视频网站| 国产亚洲欧洲997久久综合| 91嫩草丨国产丨精品| 欧美视频在线观看 亚洲欧| 国产永久免费视频| 亚洲加勒比久久88色综合| 日韩毛片久久久| 69久久夜色精品国产69| 高清不卡一区| 手机在线观看国产精品| 亚洲区一区二| 精品综合久久久久| 久久尤物电影视频在线观看| 黄色一级视频免费观看| 欧美色图第一页| 凸凹人妻人人澡人人添| 久久久精品在线观看| 成人看片在线观看| 国产麻豆日韩| 欧美一区高清| 一级片视频免费观看| 91麻豆福利精品推荐| 深夜福利影院在线观看| 欧美视频在线观看一区| 日本啊v在线| 国自产精品手机在线观看视频| av成人在线网站| 色大师av一区二区三区| 亚洲美女色禁图| 亚洲精品久久久久久| 国产精品国产三级国产普通话99| 精品免费囯产一区二区三区 | 91麻豆国产精品| 日韩欧美国产精品综合嫩v| 岳毛多又紧做起爽| 91亚洲永久精品| 日本免费一二三区| 精品区一区二区| 羞羞的视频在线观看| 国产欧美日韩中文字幕在线| 狠狠色丁香婷婷综合影院| 国产成人a亚洲精v品无码| 成人精品视频一区二区三区尤物| 翔田千里88av中文字幕| 91精品国产高清一区二区三区| 夜级特黄日本大片_在线| 国产成人高潮免费观看精品| 亚洲男人都懂第一日本| 岳毛多又紧做起爽| 91老师国产黑色丝袜在线| 日韩久久久久久久久| 亚洲国产欧美精品| yellow字幕网在线| 国产精品中出一区二区三区| 91久久黄色| xxxx黄色片| 欧美日韩国产在线看| 少妇性bbb搡bbb爽爽爽欧美| 日本高清不卡的在线| 一本色道久久综合狠狠躁的番外| 久久国产成人精品国产成人亚洲| 91影院在线免费观看| 国产精品一区二区三区四| 亚洲美女久久久| 成人看片网页| 视频一区二区视频| 国产精品一区二区在线播放| 国产亚洲精品久久久久久打不开| 精品久久一区二区| 僵尸再翻生在线观看| 欧美一区二区三区在线播放| 欧美a级理论片| 日本中文字幕免费在线观看| 日韩欧美在线一区二区三区| av毛片午夜不卡高**水| 蜜桃导航-精品导航| 日韩国产精品久久久| 色哟哟一一国产精品| 精品久久五月天| 蜜桃成人精品| 中文字幕在线乱| 成人a区在线观看| 波多野结衣黄色| xxav国产精品美女主播| 国产精品xxxav免费视频| 亚洲人成无码www久久久| 中文字幕亚洲不卡| 亚洲精品久久久久久久久久| 欧美一区二区三区四区在线| 99久久激情| 野战少妇38p| 在线观看日韩国产| 亚洲卡一卡二| 欧美视频观看一区| 国产一区二区日韩精品| 久久不卡免费视频| 色婷婷综合久久久久中文字幕1| 国产视频一区二区在线播放| 免费看国产曰批40分钟| 国产精品久久久久天堂| 亚洲欧美黄色片| 国产精品美女久久久久久免费| 欧美日韩一区二区三区四区在线观看| 国产熟女高潮一区二区三区| 欧美日韩激情在线| 麻豆成全视频免费观看在线看| 一本色道久久综合亚洲精品婷婷 | 亚洲男人天堂久| 18国产精品| 色片在线免费观看| 岛国av午夜精品| 日韩另类在线|