[T-SQL] 亂數排序的分頁查詢方法

Standard

今天遇到一個新需求,某個案件由於希望列表各物件的露出是公平的,也就是說,按照編號、時間等方式排序都不公平,希望能夠用亂數隨機排序。
環境是 SQL SERVER 配合 ASP.NET,分頁使用 AspNetPager 控制項。

這個需求看似相當容易,使用 ORDER BY NEWID() 就好了呀,但列表還要分頁呢,使用者若按下一頁,第二頁又不該出現第一頁的物件。
想到很多方法 … 可以用臨時表作、也或許可以做一隻已經亂數排好的資料 xml 以 jQuery 方式載入呈現 …

不過在拜請 Google 大神後發現一個相當有趣的作法,以 T-SQL 將某個種子值以 md5 方式編碼,並作為排序的依據。此種子值可在使用者進入頁面後給予,並塞入 Session 中,確保此使用者翻頁時還是同一種子值。
Continue reading

[MSSQL] 將資料以特定條件排序後,加上序號並寫回欄位

Standard

問題:資料原本以 sortid 欄位做排序,後台設計可上下調整排序,但某種情況下 sortid 欄位的值產生重複,造成無法正常變更排序。
因此欲重新以 sortid 排序後,加上 ROW_NUMBER() 索引,並將該索引值寫回 sortid 欄位。

環境:MS SQL SERVER 2005

Continue reading