[英]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.