2011-07-03 37 views
-1

我运行一个简单的查询得到最高5000行的一些表:SQL Server 2000中:起床前N行

SELECT TOP 5000 
     accountid, account, accountmanagerid, mainphone, alternatephone, fax, email, webaddress, createuser, modifyuser, createdate, modifydate, addressid, shippingid 
    FROM sysdba.account 
    WHERE 1 = 1 
    AND 1 = 1 
ORDER BY accountid asc 

这完美地工作的SQL Server 2008上,但不幸的是,现在我发现自己想运行这个以前的工作脚本对SQL Server 2000.它似乎拒绝顶部的命令。

我该怎么做才能在此版本的sql server上找回我的5000行?

+2

根据[MSDN文档(http://msdn.microsoft .com/en-us/library/aa259187%28v = sql.80%29.aspx),TOP在2000年有效...... – 2011-07-03 20:34:36

+0

Keoki Zee是正确的 - 在SQL Server 2000中启动了“TOP”支持。提供比“似乎拒绝命令”更多的细节。 IME,即使在拨回兼容级别后,我仍然可以使用后来支持的功能。 –

+3

从SQL Server 2005可以在TOP语句中使用表达式/变量。在SQL Server 2000中,它必须是一个整数值。您是否使用变量来指定值5000?如果你是,你可以改用SET ROWCOUNT。 –

回答

3

TOP关键字在SQL Server 2000中不可用。但是,您可以使用rowcount来过滤顶级记录。您可以修改如下上面的查询:


-- 1=1 is NOT needed unless you are appending this string as dynamic SQL 

SET ROWCOUNT 50 
SELECT 
     accountid, account, accountmanagerid, mainphone, alternatephone, fax, email, webaddress, createuser, modifyuser, createdate, modifydate, addressid, shippingid 
    FROM sysdba.account 
ORDER BY accountid asc 

+1

您的解决方案的工作,但是我只是检查TOP在SQL Server 2000中有效 –

2

没有热门关键词你也可以得到这个问题的解决方案为后续

select * from 
(
    select t_1.*,rownum c_1 from 
    (
    select accountid,account,accountmanagerid,mainphone,alternatephone, 
     fax,email,webaddress,createuser, modifyuser,createdate,modifydate,addressid,hippingid 
    FROM sysdba.account  
    WHERE 1 = 1-- whatever condition 
    AND 1 = 1 -- condition 2 
    ORDER BY accountid asc 
)t_1 
) 
where c_1 <5000 
order by c_1