SQLServer 实现rownum 的功能
今天想把最近做的項(xiàng)目的Oracle數(shù)據(jù)庫(kù)換成SqlServer數(shù)據(jù)庫(kù),在轉(zhuǎn)換的過(guò)程中出現(xiàn)一點(diǎn)問(wèn)題,就是輸出表的行號(hào)的時(shí)候出現(xiàn)了問(wèn)題,在Oracle數(shù)據(jù)庫(kù)中,可以直接通過(guò)它的rownum來(lái)完成,語(yǔ)句如下
select rownum as num,t.occurrenceid,t.occurrencenum2,t.registerdate,b.occtype,t.AMOUNT,t.occresult,t.occtime,t.yr,t.zi,t.hao,t.step as step from occurrence t left join occ_type b?on t.occtypeid = b.occtypeid?where t.step<3 and t.Departmentid='101000' order by t.registerdate desc
但是放到SqlServer2005中就會(huì)出錯(cuò)看,說(shuō)是rownum有錯(cuò)誤,最后才知道在SqlServer查詢行號(hào)不是那樣查的,是用SqlServer的row_number()來(lái)查詢的
select row_number() over(order by t.registerdate desc) as num,t.occurrenceid,t.occurrencenum2,t.registerdate,b.occtype,t.AMOUNT,t.occresult,t.occtime,t.yr,t.zi,t.hao,t.step as step from occurrence t left join occ_type b?on t.occtypeid = b.occtypeid?where t.step<3 and t.Departmentid='101000'
解釋:
1 此方法把括號(hào)里的查詢結(jié)果放到變量:temp 里面( 我也不確定是不是變量), 并用row_number() 函數(shù)進(jìn)行一個(gè)行號(hào)跟蹤, 再用over 函數(shù)進(jìn)行一個(gè)列的排序規(guī)則( 是這必須的), 并指定列名為'rownum'
2 緊接著在下面的語(yǔ)句可以對(duì) 'rownum' 進(jìn)行一個(gè)指定行號(hào)的查詢
?
?
其實(shí)顯示序號(hào)除了采用sql處理外,我們也可以在程序代碼中實(shí)現(xiàn),比如sql2000可能使用sql就不行了,那么怎么辦呢,可以看看下面的例子:
?
View Code ??????string?sql?=?"select?*?from?jh_job?where?jh_check?=?1?order?by?jh_pdate?desc";????????DataTable?dt?=?LYDAO.SqlText.ExecuteDataset(sql).Tables[0];
????????DataColumn?dc?=?new?DataColumn("num");
????????dt.Columns.Add(dc);
????????for?(int?i?=?0;?i?<?dt.Rows.Count;?i++)
????????{
????????????DataRow?row?=?dt.NewRow();
????????????int?j=i+1;
????????????if?(i?<?10)
????????????{
??????????????
????????????dt.Rows[i]["num"]=?"0"?+?j;
????????????}
????????????else
????????????{
???????????????
????????????dt.Rows[i]["num"]=j;
????????????}
????????}
?
然后綁定dt,在頁(yè)面中讀出num即可..?
?
?
?
?
?
總結(jié)
以上是生活随笔為你收集整理的SQLServer 实现rownum 的功能的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: GNS中支持的模块
- 下一篇: ubuntu安装Java开发环境