SQLServer 实现rownum 的功能
今天想把最近做的項目的Oracle數據庫換成SqlServer數據庫,在轉換的過程中出現一點問題,就是輸出表的行號的時候出現了問題,在Oracle數據庫中,可以直接通過它的rownum來完成,語句如下
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中就會出錯看,說是rownum有錯誤,最后才知道在SqlServer查詢行號不是那樣查的,是用SqlServer的row_number()來查詢的
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 此方法把括號里的查詢結果放到變量:temp 里面( 我也不確定是不是變量), 并用row_number() 函數進行一個行號跟蹤, 再用over 函數進行一個列的排序規則( 是這必須的), 并指定列名為'rownum'
2 緊接著在下面的語句可以對 'rownum' 進行一個指定行號的查詢
?
?
其實顯示序號除了采用sql處理外,我們也可以在程序代碼中實現,比如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,在頁面中讀出num即可..?
?
?
?
?
?
總結
以上是生活随笔為你收集整理的SQLServer 实现rownum 的功能的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GNS中支持的模块
- 下一篇: ubuntu安装Java开发环境