[英]SQL Server ROW_NUMBER() on SQL Server 2000?
我有一個查詢,允許我通過給它一個最小和最大限制從數據庫表中獲取記錄。
它是這樣的:
SELECT T1.CDUSUARIO, T1.DSALIAS, T1.DSNOMBRE_EMPRESA, T1.DSCARGO, T1.DSDIRECCION_CORREO, T1.CDUSUARIO_ADMINISTRADOR, T1.FEMODIFICACION
FROM (SELECT *,
ROW_NUMBER() OVER (ORDER BY CDUSUARIO) as row FROM TBL_USUARIOS ) as T1
WHERE row > @limiteInf
and row <= @limiteSup
ORDER BY DSALIAS ASC;
現在,它在SQL Server 2005和SQL Server 2008上就像天堂一樣,但是試圖在SQL Server 2000數據庫上運行它並說:
ROW_NUMBER它是一個未知的函數名稱或類似的東西。
我能做什么??
這兩種解決方案都不支持PARTITION BY
我沒有提到基於循環或基於CURSOR的解決方案可能更糟
編輯20011年5月20日
IDENTITY無法工作的示例演示:
插入的記錄是否始終接收連續的標識值
我知道這個線程有點舊,但對於其他尋找相同解決方案的人來說,我認為知道這個問題有一個很好的解決方案會很有用。
請在此處查看原始鏈接
對於那些不想點擊鏈接的人,我復制並粘貼了以下代碼。 再次,歸功於原始出版商
下面是SQL Server 2000的SQL,用於通過單個列選擇最新版本的記錄分組。
SELECT *
FROM (
SELECT *, (
SELECT COUNT(*)
FROM MyTable AS counter
WHERE counter.PartitionByColumn = MyTable.PartitionByColumn
AND counter.OrderByColumn >= MyTable.OrderByColumn
) AS rowNumber
FROM MyTable
) AS r1
WHERE r1.rowNumber = 1
SQL Server 2005中的相同代碼如下所示:
SELECT * FROM (SELECT *, ROW_NUMBER() OVER(PARTITION BY PartitionByColumn
ORDER BY OrderByColumn DESC) AS rowNumber FROM MyTable) AS rw1
WHERE rw1.rowNumber = 1
使用其他功能或升級數據庫。 ROW_NUMBER在2000版本的數據庫中不存在。 點。 你無能為力。
這是我解決問題的方法:
declare @i int
declare @t table (row int, stuff varchar(99))
insert into @t
select 0,stuff from mytable -- <= your query
set @i=0
update @t set row=@i, @i=@i+1
select * from @t
說明:
你可能會問,為什么我不在select語句中使用變量? 它會更簡單,但只有在沒有結果的情況下才允許。 可以在更新中執行此操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.