我有一个查询,允许我通过给出最小和最大限制来从数据库表中获取记录。
它是这样的:
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这是一个未知的函数名称或类似的东西。
我该怎么办?
答案 0 :(得分:11)
两种解决方案都不支持PARTITION BY
我没有提到基于循环或基于CURSOR的解决方案可能更糟
编辑20011年5月20日
为什么IDENTITY不起作用的示例演示:
Do Inserted Records Always Receive Contiguous Identity Values
答案 1 :(得分:4)
使用其他功能或升级您的数据库。 ROW_NUMBER在2000版本的数据库中不存在。点。你无能为力。
答案 2 :(得分:4)
我知道这个帖子有点旧,但对于其他寻找相同解决方案的人来说,我认为知道这个问题有一个很好的解决方案会很有用。
请参阅原始链接here
对于那些不想点击链接的人,我复制并粘贴了以下代码。再次归功于original publisher
以下是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
答案 3 :(得分:-1)
这是我解决问题的方法:
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语句中使用变量?它会更简单,但只有在没有结果的情况下才允许。可以在更新中执行此操作。