校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > 用一句SQL解決SQL中斷號問題 推薦

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

熱門標簽:最新人工智能電銷機器人 沒聽見電話機器人幫你接 陜西電銷外呼系統好用嗎 成都電話外呼系統一般多少錢 蘭州語音外呼系統運營商 如何做地圖標注圖鋪 數字匠心電銷機器人 銀川高頻外呼回撥系統多少錢 al智能電話機器人
名詞解釋
  斷號:比如,連續生成的編號,由于某種操作(通常為刪除)后,產生不連續的編號,我們將這種不連續的編號稱為斷號。
  例如,數據庫中有一個字段叫合同編號,正常格式為201106_011(表示2011年6月的第11個合同),那么它前面的一個合同編號應該為201106_10,后面的一個應該為201106_12,當我們刪除了合同201106_011,就會出現201106_010后面直接是201106_012,這種情況下叫做斷號。
  傳統系統中,像這種斷號的情況很常見,比如數據庫中的列為遞增類型,當刪除某行后,就會出現斷號,而經常有客戶提出需求,不希望出現斷號的情況。解決方案通常就是,如果刪除了某行數據,那么下次新增時,應該將斷號補齊。
      問題很簡單,解決方法也很簡單:
      寫一個C#方法,用來獲取下一條記錄的編號:

復制代碼 代碼如下:

public static int GetNextNumber(int[] iNumList)
{
int iTempStr = iNumList[0]; //用一個臨時變量保存上一條記錄的編號
for (var i = 0; i iNumList.Length - 1; i++)
{
if (i == 0)
{
iTempStr = iNumList[i];
}
//如果出現斷號,則補齊斷號
if ((iNumList[i] - iTempStr) > 1)
{
return iTempStr + 1;
}
else
{
iTempStr = iNumList[i];
}
continue;
}
return iNumList[iNumList.Length - 1] + 1;
}

當然,這段代碼也可以簡寫為以下形式:
復制代碼 代碼如下:

public static int GetNextNumber3(int[] iNumList)
{
for (int i = 0, j = 1; j iNumList.Length - 1; i++, j++)
{
//如果出現斷號,則補齊斷號
if ((iNumList[j] - iNumList[i]) > 1)
{
return iNumList[i] + 1;
}
}
return iNumList[iNumList.Length - 1] + 1;
}

測試代碼如下:
復制代碼 代碼如下:

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

運行結果如下:
  
 
前幾天再次接觸到這個問題,由于特殊的場景,再用C#反而會增加開發難度,如果想法通過SQL來解決問題:
建表及制造數據SQL:
復制代碼 代碼如下:

CREATE TABLE testTable
(
Code int primary key
)

INSERT INTO testTable(Code) VALUES (1)
INSERT INTO testTable(Code) VALUES (2)
INSERT INTO testTable(Code) VALUES (3)
INSERT INTO testTable(Code) VALUES (4)
INSERT INTO testTable(Code) VALUES (5)
INSERT INTO testTable(Code) VALUES (6)
INSERT INTO testTable(Code) VALUES (7)
INSERT INTO testTable(Code) VALUES (8)
INSERT INTO testTable(Code) VALUES (9)
INSERT INTO testTable(Code) VALUES (10)

然后再同樣刪除第3、7、8行的數據,使這三行產生斷號:
DELETE FROM testTable WHERE Code in (3,7,8)
分析:要產生連號,即是要讓Code這一列上連續的,也就是說每每兩行之間的Code相差為1
由于Code是從1開始的(從其他數字開始的也是同理計算),即按Code從小到大排序號,Code為1的行應該為第一行,Code為10的行應該在第10行,即Code=行號,
既然這樣,預覽數據如下:
刪除數據前的排號:
  
 
  刪除數據后的排號:
  很明顯發現,刪除數據前,Code=行號,刪除后Code不等于等號,而刪除數據后的第一行Code不等于行號的數據,即是第一個出現斷號的數據,即為我們想要查詢的結果。
  如是,如果數據庫中有斷號,則可以用以下語句直接查出斷號:
  
  結果立現。
  這段代碼還存在一個缺陷,即此方法專用來處理有斷號的情況,如果不存在斷號時,應該返回Max(RowNumber)+1。正確代碼應該如下:
 
  至此,我今天要講的基本結束,此處借用了SQL2005的方法row_number ,其他數據庫中也有類似的方法,大家可以自己摸索。
  問題完全解決了嗎?大家可以發現,以上出現了斷號的情況,都是從小開始補號,比如3,7,8同時為斷號,則補3。假如有客戶要求從大號開始補號(即3,7,8斷號時,補8呢),怎么處理?
  前面兩種通過C#方法操作的就很容易了,這里主要說一下通過SQL處理的方法:
  
  那么再擴展一下,如何查出所有的斷號呢?
  要實現這個功能,一般想法是將當前Code與上一行的Code進行對比,但由于可能出現連續斷號的情況(例如刪除了 Code=7、8、9三行)。此時該如何處理呢?
  我的解決方法是,假如max(code)等于100,那么我先構造出100行(怎樣構造?數據庫中隨便找個行數大于100的表,select top 100就行了,如果沒有行數大于100的表,就聯合查詢構造出100行吧),再用這一100行的行號分別和code進行對比,如果存在Code>行號的,即該處為斷裂號,示例如下:
假設系統中已經存在另一張表A,它的總行數>max(Code),【注:當然,如果不存在這樣的表,也可以通過select 的方式構造出來】,
查詢所有斷號的SQL如下:
  
  
  至此,問題結束,以上代碼的優點在于只用一個SQL語句,而不需要用存儲過程、用戶自定義函數或C#中的循環,就可以解決各種斷號問題,當然為了性能方面還可以再做優化,在此不列出。  

標簽:通化 本溪 鹽城 邢臺 宜春 遼源 巴彥淖爾 朔州

巨人網絡通訊聲明:本文標題《用一句SQL解決SQL中斷號問題 推薦》,本文關鍵詞  用,一句,SQL,解決,中斷,號,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《用一句SQL解決SQL中斷號問題 推薦》相關的同類信息!
  • 本頁收集關于用一句SQL解決SQL中斷號問題 推薦的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    eeuss鲁一区二区三区| 久久久精品综合| 99久久久国产精品| 色欧美88888久久久久久影院| 国产乱码一区二区三区| 另类专区欧美蜜桃臀第一页| 免费在线一区观看| 国产一区视频导航| 成人精品视频一区二区三区尤物| 波多野结衣一区二区三区| 92国产精品观看| 欧美一区二区日韩| 国产亚洲一二三区| 一区二区欧美精品| 久久精品国产77777蜜臀| 国产乱淫av一区二区三区| 99精品欧美一区二区三区综合在线| av高清久久久| 精品1区2区在线观看| 中文字幕五月欧美| 国产一区美女在线| 欧美视频在线观看一区二区| 精品精品国产高清a毛片牛牛| 国产精品久久毛片| 久久99精品久久久久久| 欧美在线免费观看亚洲| 欧美精彩视频一区二区三区| 亚洲欧美日韩久久精品| 国产乱色国产精品免费视频| 欧美日韩国产高清一区二区三区| 精品国产第一区二区三区观看体验| 国产精品久久久久久一区二区三区| 美女网站一区二区| 欧美在线免费视屏| 亚洲成人av福利| 91福利在线观看| 一区2区3区在线看| 91麻豆精品视频| 一区二区三区中文在线| 99久久99久久免费精品蜜臀| 精品久久人人做人人爱| 美日韩一级片在线观看| 久久蜜臀精品av| 国产精品一区专区| 中文字幕国产一区| 91女厕偷拍女厕偷拍高清| 亚洲人成网站在线| 欧美亚洲自拍偷拍| 日本不卡视频在线| 久久久久久久久99精品| 国产成人午夜片在线观看高清观看| 精品福利二区三区| 国产精品91一区二区| 国产精品每日更新在线播放网址 | 狠狠久久亚洲欧美| 精品国偷自产国产一区| 国内精品国产成人国产三级粉色 | 老司机精品视频在线| 欧美一级艳片视频免费观看| 国产一区美女在线| 亚洲美女偷拍久久| 日韩精品中文字幕一区二区三区 | 2022国产精品视频| 99国产精品99久久久久久| 亚洲成人中文在线| 中文字幕欧美日韩一区| 欧美三级视频在线播放| 极品少妇一区二区三区精品视频| 中文字幕第一区第二区| 欧美日韩精品一区二区三区| 狠狠色丁香婷婷综合| 一区二区三区影院| 国产婷婷色一区二区三区在线| 色综合天天综合给合国产| 国产精品自拍一区| 欧美aaa在线| 三级欧美韩日大片在线看| 亚洲人成网站色在线观看| 久久久蜜臀国产一区二区| 88在线观看91蜜桃国自产| 91丨porny丨户外露出| 丁香网亚洲国际| 国产精品亚洲成人| 国产一区二区福利视频| 久久精品国产精品亚洲红杏| 亚洲第一在线综合网站| 一区二区三区丝袜| 亚洲午夜一区二区| 亚洲成av人片在线| 亚洲第一久久影院| 美女精品一区二区| 国产老肥熟一区二区三区| 国产一区二区在线影院| 国产成人aaa| 不卡的av电影| 欧美日韩一区 二区 三区 久久精品| 成人福利在线看| 欧美性受xxxx| 日韩欧美国产小视频| 337p日本欧洲亚洲大胆精品| 久久奇米777| 亚洲色图欧美激情| 天堂成人国产精品一区| 裸体一区二区三区| 成人免费观看视频| 欧美视频在线观看一区二区| 国产传媒一区在线| 91久久精品国产91性色tv | 国产亚洲欧美一级| 亚洲自拍偷拍麻豆| 一区在线中文字幕| 久久99久久精品| 国产在线一区二区| 99精品偷自拍| 欧美白人最猛性xxxxx69交| 中文字幕精品三区| 秋霞国产午夜精品免费视频| 成人黄色电影在线| 久久久综合视频| 日本在线观看不卡视频| 在线影院国内精品| 国产精品的网站| 成人一级片在线观看| 亚洲精品在线免费播放| 亚洲国产wwwccc36天堂| 91福利在线观看| 亚洲伦在线观看| 97久久精品人人做人人爽| 国产日韩一级二级三级| 国产精品一卡二| 国产人成亚洲第一网站在线播放 | 91福利视频久久久久| 国产精品美女久久久久av爽李琼| 国产一区二区在线影院| 久久综合九色综合欧美亚洲| 国内一区二区视频| 国产日本欧洲亚洲| 国产成人av资源| 亚洲三级在线免费| 在线观看日韩高清av| 日韩1区2区3区| 2023国产精品| 91福利视频久久久久| 婷婷激情综合网| 精品国产一区二区三区不卡 | 中文字幕av一区二区三区| 国产不卡免费视频| 亚洲精品一二三区| 精品日韩av一区二区| 99国产一区二区三精品乱码| 亚洲一区二区三区中文字幕在线| 777午夜精品视频在线播放| 日韩av电影一区| 自拍偷在线精品自拍偷无码专区| 在线亚洲一区观看| 久久99精品久久久久久| 亚洲日本韩国一区| 欧美大片在线观看一区| 日本福利一区二区| 中文字幕欧美一| 欧美精品一区二区在线播放| 顶级嫩模精品视频在线看| 喷白浆一区二区| 亚洲mv在线观看| 中文字幕免费不卡在线| 精品粉嫩aⅴ一区二区三区四区| 欧美优质美女网站| 99久久伊人网影院| 国产精品1区2区3区| 国产一区二区三区观看| 蜜桃精品视频在线| 欧美aⅴ一区二区三区视频| 亚洲h在线观看| 亚洲国产美女搞黄色| 亚洲欧美视频一区| 亚洲区小说区图片区qvod| 国产亚洲精品福利| 日本一区二区免费在线| 国产精品全国免费观看高清| 久久影院午夜论| 国产欧美精品国产国产专区| 久久精品欧美日韩| 国产欧美视频一区二区| 国产精品久久久久影院老司| 国产精品久久久久精k8| 综合中文字幕亚洲| 亚洲国产美女搞黄色| 韩国女主播成人在线观看| 国产一区二区三区免费看| av爱爱亚洲一区| 欧美美女一区二区| 2023国产一二三区日本精品2022| 国产欧美日韩另类一区| 亚洲精品国产精华液| 丝袜诱惑亚洲看片| 成人高清伦理免费影院在线观看| 日本韩国一区二区| 精品久久人人做人人爱| 亚洲久草在线视频| 福利电影一区二区三区|