溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

巧用 ROW_NUMBER() 生成不重復(fù)的唯一排序碼,按客戶的需要任意排序數(shù)據(jù)

發(fā)布時(shí)間:2020-05-09 13:11:51 來源:網(wǎng)絡(luò) 閱讀:521 作者:jirigala_bao 欄目:web開發(fā)

最近項(xiàng)目里遇到這樣的一個(gè)小技術(shù)問題,新聞可以任意按客戶的需要進(jìn)行排序,需要實(shí)現(xiàn)的效果圖如下:

巧用 ROW_NUMBER() 生成不重復(fù)的唯一排序碼,按客戶的需要任意排序數(shù)據(jù)

由于各種類別輸入了蠻多測(cè)試信息,有幾百條數(shù)據(jù),一個(gè)個(gè)把排序碼都生成也很麻煩,看能否沒有什么好辦法能生成不重復(fù)的,唯一排序碼?達(dá)到如下效果?

總不可能人工的一個(gè)個(gè)輸入吧? 也沒那個(gè)耐心的,還是想想有什么好辦法吧?

巧用 ROW_NUMBER() 生成不重復(fù)的唯一排序碼,按客戶的需要任意排序數(shù)據(jù)

 

其實(shí)很快就想到了 ROW_NUMBER() 功能,用這個(gè),應(yīng)該是可行的,折騰了一小會(huì)兒,這個(gè)SQL語句就寫好了,給大家分享一下,有需要的朋友們可以直接拿過來就可以用了,雖然也沒什么難的,但是自己寫總會(huì)折騰一會(huì)兒,直接復(fù)制過去修改一下,省心省事一些。

 

1 UPDATE BASE_NEWS
2    SET SortCode = NEWS.SortCode
3  FROM (SELECT ROW_NUMBER() OVER (ORDER BY CreateDate DESC) + 10000000 AS SortCode
4               , Id
5          FROM BASE_NEWS) AS NEWS
6 WHERE NEWS.Id = BASE_NEWS.Id
復(fù)制代碼

 

此文雖然是過于基礎(chǔ)了一些,但是往往基礎(chǔ)的東西,大家日常生活里需要得更多,希望能對(duì)需要的人起點(diǎn)兒參考作用,可以COPY一下就可以用了. 

若有誰可以寫得更好,也可以貼出來分享一下。

 

四個(gè)按鈕中的代碼實(shí)現(xiàn)可以參考一下

 

巧用 ROW_NUMBER() 生成不重復(fù)的唯一排序碼,按客戶的需要任意排序數(shù)據(jù)巧用 ROW_NUMBER() 生成不重復(fù)的唯一排序碼,按客戶的需要任意排序數(shù)據(jù)代碼
 1         #region private void SetSort(string function, int index) 設(shè)置排序順序
 2         /// <summary>
 3         /// 設(shè)置排序順序
 4         /// </summary>
 5         /// <param name="function">排序動(dòng)作</param>
 6         /// <param name="index">索引</param>
 7         private void SetSort(string function, int index)
 8         {
 9             string id = this.gridView.DataKeys[index].Value.ToString();
10             string targetId = string.Empty;
11             try
12             {
13                 this.DbHelper.Open();
14                 // 判斷編輯權(quán)限
15                 // this.CheckPermission(this.CategoryId, OperationCode.Edit);
16                 switch (function)
17                 {
18                     case BaseDbSortLogic.CommandSetTop:
19                         if (index > 0)
20                         {
21                             BaseDbSortLogic.SetTop(this.DbHelper, ProjectTable.TableName, id);
22                             this.gridView.SelectedIndex = 0;
23                         }
24                         break;
25                     case BaseDbSortLogic.CommandSetUp:
26                         if (index > 0)
27                         {
28                             targetId = this.gridView.DataKeys[index - 1].Value.ToString();
29                             this.gridView.SelectedIndex = index - 1;
30                             BaseDbSortLogic.Swap(this.DbHelper, ProjectTable.TableName, id, targetId);
31                         }
32                         break;
33                     case BaseDbSortLogic.CommandSetDown:
34                         if ((index + 2< this.gridView.Rows.Count)
35                         {
36                             targetId = this.gridView.DataKeys[index + 1].Value.ToString();
37                             this.gridView.SelectedIndex = index + 1;
38                             BaseDbSortLogic.Swap(this.DbHelper, ProjectTable.TableName, id, targetId);
39                         }
40                         break;
41                     case BaseDbSortLogic.CommandSetBottom:
42                         if ((index + 2< this.gridView.Rows.Count)
43                         {
44                             BaseDbSortLogic.SetBottom(this.DbHelper, ProjectTable.TableName, id);
45                             this.gridView.SelectedIndex = this.gridView.Rows.Count - 2;
46                         }
47                         break;
48                 }
49                 // 獲取列表
50                 this.DoSearch();
51             }
52             catch (Exception ex)
53             {
54                 this.LogException(ex);
55                 throw ex;
56             }
57             finally
58             {
59                 this.DbHelper.Close();
60             }
61         }
62         #endregion

 

 

 

將權(quán)限管理、工作流管理做到我能力的極致,一個(gè)人只能做好那么很少的幾件事情。
分類: [03] 項(xiàng)目開發(fā)經(jīng)驗(yàn)
 
綠色通道:好文要頂關(guān)注我收藏該文與我聯(lián)系 巧用 ROW_NUMBER() 生成不重復(fù)的唯一排序碼,按客戶的需要任意排序數(shù)據(jù)
巧用 ROW_NUMBER() 生成不重復(fù)的唯一排序碼,按客戶的需要任意排序數(shù)據(jù)
信息化建標(biāo)準(zhǔn)開放平臺(tái)
關(guān)注 - 177
粉絲 - 1226
 
榮譽(yù):推薦博客
+加關(guān)注
30
6
 
(請(qǐng)您對(duì)文章做出評(píng)價(jià))
 
« 博主前一篇:內(nèi)部管理類軟件基礎(chǔ)架構(gòu)思想(思路圖解 + 配套免費(fèi)視頻)
» 博主后一篇:[走火入魔失眠夜]淺談管理軟件信息安全,用戶名、密碼的加密解密【附C#配套加密解密源碼】
 

巧用 ROW_NUMBER() 生成不重復(fù)的唯一排序碼,按客戶的需要任意排序數(shù)據(jù)

Add your comment

32 條回復(fù)

1996343
  1. #1樓 cnwei      2010-09-28 14:44
    先頂再看o(∩_∩)o...
     回復(fù) 引用 查看   
  2. #2樓[樓主] 吉日嘎拉 不僅權(quán)限管理      2010-09-28 14:45
    @cnwei
    熱烈歡迎,很簡單的一個(gè)東東。
     回復(fù) 引用 查看   
  3. #3樓 尋自己      2010-09-28 14:58
    思想很好,學(xué)習(xí)了,thanks
     回復(fù) 引用 查看   
  4. #4樓 小情      2010-09-28 15:14
     回復(fù) 引用 查看   
  5. #5樓 滿晨晨      2010-09-28 15:45
    i have ever meet the problem before
     回復(fù) 引用 查看   
  6. #6樓 Jeffery You      2010-09-28 16:00
    為什么不用 Sequence ?用 Sequence 不是更好
     回復(fù) 引用 查看   
  7. #7樓 異鄉(xiāng)風(fēng)鈴      2010-09-28 16:08
    支持
     回復(fù) 引用 查看   
  8. #8樓[樓主] 吉日嘎拉 不僅權(quán)限管理      2010-09-28 16:11
    @Jeffery You
    sqlserver 有這個(gè)東西嗎?
     回復(fù) 引用 查看   
  9. #9樓 taia      2010-09-28 16:54
    改一條新聞的次序,還得把整個(gè)表的序列重新更新一次?
     回復(fù) 引用 查看   
  10. #10樓 Jeffery You      2010-09-28 16:56
    呵呵,我還以為是 Oracle!不好意思。
    不過,你也沒說這是 SQL Server 啊,從文章中我也沒看出來,而且 ROW_NUMBER 第一反應(yīng)就是 Oracle,SQL Server 是后來才有的。
     回復(fù) 引用 查看   
  11. #11樓[樓主] 吉日嘎拉 不僅權(quán)限管理      2010-09-28 17:36
    @taia

    主要是有一大堆人工輸入的測(cè)試數(shù)據(jù)在的
     回復(fù) 引用 查看   
  12. #12樓 Fine1[未注冊(cè)用戶]2010-09-28 18:00
    太基礎(chǔ)了!
     回復(fù) 引用   
  13. #13樓[樓主] 吉日嘎拉 不僅權(quán)限管理      2010-09-28 19:33
    若是不太基礎(chǔ)了,你也看不出是太基礎(chǔ)了,呵呵。
    引用Fine1:太基礎(chǔ)了!

     回復(fù) 引用 查看   
  14. #14樓 lcs-帥      2010-09-28 20:33
    以前排序都是直接使用datetime,目前好像沒有這種需求了。
     回復(fù) 引用 查看   
  15. #15樓 Jeffrey.Liang      2010-09-28 22:29
    UPDATE BASE_NEWS
    SET SortCode = NEWS.SortCode
    FROM (SELECT ROW_NUMBER() OVER(ORDER BY CreateDate DESC) + 10000000 AS SortCode
    , Id,CreateDate
    FROM BASE_NEWS) AS NEWS
    WHERE NEWS.Id = BASE_NEWS.Id

    樓主,我能看到這段SQL是在干什么,意思是說,我能看懂“FROM (SELECT ROW_NUMBER() OVER(ORDER BY CreateDate DESC) + 10000000 AS SortCode
    , Id,CreateDate
    FROM BASE_NEWS) AS NEWS”是在生成臨時(shí)表。但一般的更新語句都是update tableName set fieldName=value where的形式,但在set和where之間冒出一個(gè)from子句出來,這種寫法還是第一次看到。
     回復(fù) 引用 查看   
  16. #16樓[樓主] 吉日嘎拉 不僅權(quán)限管理      2010-09-29 00:21
    @Jeffrey.Liang
    你說到點(diǎn)子上了,技術(shù)就體現(xiàn)在 FROM 而且是虛擬的表上。
    小子洞察力很強(qiáng)的嘛
     回復(fù) 引用 查看   
  17. #17樓 ugvanxk      2010-09-29 08:38
    用(當(dāng)前ID-最小id)+100000
     回復(fù) 引用 查看   
  18. #18樓 總想擁有自己的天空      2010-09-29 08:54
    吉日兄,頂一個(gè),基礎(chǔ)但實(shí)用
     回復(fù) 引用 查看   
  19. #19樓 魚蛋兒      2010-09-29 08:58
    我操,我想死。
     回復(fù) 引用 查看   
  20. #20樓 隨處走走      2010-09-29 09:04
    SQL 語句我能理解,可是這個(gè)SQL語句怎么解決客戶自定義排序我沒怎么看明白, 我看順序是上移一個(gè),下移一個(gè)或是到頂或是到尾是吧?
     回復(fù) 引用 查看   
  21. #21樓[樓主] 吉日嘎拉 不僅權(quán)限管理      2010-09-29 09:31
    @隨處走走
    置頂、上移、下移、置底
     回復(fù) 引用 查看   
  22. #22樓 超級(jí)奶崽      2010-09-29 09:52
    有沒有比較好的方法對(duì)換兩條記錄的排序號(hào)
     回復(fù) 引用 查看   
  23. #23樓 軒轅劍      2010-09-29 10:21
    我用一個(gè)時(shí)間字段來排序的
     回復(fù) 引用 查看   
  24. #24樓 cherry .Net      2010-09-29 10:42
    哎喲,不錯(cuò)哦!?。?/span>
     回復(fù) 引用 查看   
  25. #25樓 隨處走走      2010-09-29 10:59
    @吉日嘎拉 不僅權(quán)限管理
    。。。我能看懂那四個(gè)圖標(biāo), 我是沒看懂這四個(gè)圖標(biāo)怎么和你提供的SQL語句關(guān)聯(lián)
     回復(fù) 引用 查看   
  26. #26樓[樓主] 吉日嘎拉 不僅權(quán)限管理      2010-09-29 11:09
    那4個(gè)圖標(biāo)對(duì)應(yīng)的代碼,就是C#寫的了,不是sql語句了,我把代碼也貼上,給大家一個(gè)參考好了。

    引用隨處走走:
    @吉日嘎拉 不僅權(quán)限管理
    。。。我能看懂那四個(gè)圖標(biāo), 我是沒看懂這四個(gè)圖標(biāo)怎么和你提供的SQL語句關(guān)聯(lián)

     回復(fù) 引用 查看   
  27. #27樓 zisehudie      2010-09-29 12:11
    這樣不得把整張表都更新一遍

    這樣是一件很可怕的事情啊 相當(dāng)影響效率啊
     回復(fù) 引用 查看   
  28. #28樓 Peter_pan      2010-09-29 12:18
    吉日的代碼就是很實(shí)際,頂一個(gè)
     回復(fù) 引用 查看   
  29. #29樓[樓主] 吉日嘎拉 不僅權(quán)限管理      2010-09-29 13:04
    @zisehudie
    沒有把整張表都更新的,都更新單個(gè)
     回復(fù) 引用 查看   
  30. #30樓 不訴離殤      2010-10-02 19:16
    大哥 頂一個(gè)!
     回復(fù) 引用 查看   
  31. #31樓[樓主] 吉日嘎拉 不僅權(quán)通用權(quán)限      2010-10-12 13:53
    @不訴離殤
    謝謝你的支持啊
     回復(fù) 引用 查看   
  32. #32樓 jerryloving      2010-12-24 13:30
    來頂頂
     回復(fù) 引用 查看   
 
刷新評(píng)論列表刷新頁面返回頂部
最新IT新聞:
· Zynga被OMGPOP超越 不再是Facebook游戲王
· 當(dāng)當(dāng)多名用戶賬戶被盜索賠遭拒 回應(yīng)讓報(bào)警處理
· 新iPad入門版拆解:元件成本316美元
· 電信iPhone 4S裸機(jī)價(jià)格出爐 購買贈(zèng)1050元話費(fèi)
· 雅虎訴Facebook警醒創(chuàng)業(yè)公司:盡早申請(qǐng)專利
» 更多新聞...
最新知識(shí)庫文章:
· 循序漸進(jìn)學(xué)編程
· Web開發(fā):我希望得到的編程學(xué)習(xí)路線圖
· Google Dart精粹:應(yīng)用構(gòu)建,快照和隔離體
· 谷歌是如何做測(cè)試的
· URL, URI 和 URN 之間的區(qū)別
 
» 更多知識(shí)庫文章...
巧用 ROW_NUMBER() 生成不重復(fù)的唯一排序碼,按客戶的需要任意排序數(shù)據(jù)
China-pub 2011秋季教材巡展
China-Pub 計(jì)算機(jī)絕版圖書按需印刷服務(wù)
 
歷史上的今天:
2009-09-28 一步步教你如何用瘋狂.NET架構(gòu)中的通用權(quán)限系統(tǒng) -- 分級(jí)授權(quán)
 
向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI