程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 如何在SQL Server中對行進行動態編號

如何在SQL Server中對行進行動態編號

編輯:關於SqlServer

如何在SQL中對行進行動態編號,加行號這個問題,在數據庫查詢中,是經典的問題。我把現在的方法整理一下,分享一下技巧吧。代碼基於pubs樣板數據庫。在SQL中,一般就這兩種方法:

1.使用臨時表

可以使用select into 創建臨時表,在第一列,加入Identify(int,1,1)作為行號,這樣在產生的臨時表中,結果集就有了行號.也是目前效率最高的方法。這種方法不能用於視圖

代碼:

set nocount on
select IDentify(int,1,1) 'RowOrder',au_lname,au_fname into #tmp
from authors
select * frm #tmp
drop table #tmp

2.使用自連接

不用臨時表,在SQL語句中,動態的進行排序.這種方法用到的連接是自連接,連接關系一般是大於。

代碼:

<

code>select rank=count(*), a1.au_lname, a1.au_fname
from authors a1 inner
join authors a2 on a1.au_lname + a1.au_fname >= a2.au_lname + a2.au_fname
group by a1.au_lname, a1.au_fname
order by count(*)

運行結果:

rank au_lname au_fname 1 Bennet Abraham 2 Blotchet-Halls Reginald 3 Carson Cheryl 4 DeFrance Michel 5 del Castillo Innes 6 Dull Ann 7 Greene Morningstar ... ... ...

缺點:

1.使用自聯接,所以該方法不適用於處理大量行。它適用於處理幾百行。對於大型表,一定要使用索引以避免進行大范圍的搜索,或用第一種方法.

2.不能正常處理重復值。當比較重復值時,會出現不連續的行編號。如果不希望出現這種現象,可以在電子表格中插入結果時隱藏排序列,而是使用電子表格編號,或用第一種方法

優點:

1.這些查詢可以用於視圖和結果格式設置中

在結果集中插入了行號,現在就可以將結果集合緩存起來,然後使用DataView,加入過濾條件

RowNum>PageIndex*PageSize And RowNum<=(PageIndex+1)*PageSize

就能實現快速的分頁,而且不論你的頁面數據綁定控件是什麼(DataList,DataGrid,還是Repeate都可以)。如果你使用的是DataGrid,那麼建議不要使用這種技術。因為DataGrid的分頁效率和它差不多。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved