2010-02-24 47 views
2

在我最近的问题中,我询问了SQL Server中的分页方法。读一篇贴在那里的文章,我想出了下面的代码。一切看起来都正确但我收到以下错误:SQL Server分页错误

除非还指定了TOP或FOR XML,否则ORDER BY子句在视图,内联函数,派生表,子查询和公用表表达式中无效。

PAGEID = Request.QueryString("PAGEID") 

If PAGEID = "" or PAGEID = 0 Then 
    PAGEID = 1 
End If 

RecordsPerPage = 1 
RecordsPageSize = PAGEID * RecordsPerPage 

SQL = "SELECT * FROM (SELECT I.IMAGESID, I.IMAGESNAME, I.IMAGESSMURL, ROW_NUMBER() OVER (ORDER BY I.IMAGESID) As Row" 
SQL = SQL & " FROM IMAGES I" 
SQL = SQL & " WHERE Row > ("& RecordsPageSize - RecordsPerPage &") AND Row <= ("& RecordsPageSize &") ORDER BY I.IMAGESID DESC" 
Set objImages = objConn.Execute(SQL) 

%> 
       <div class="row"> 
        <label for="Images">Images</label> 
<% Do While Not objImages.EOF %> 
    <img src="<%=objImages("IMAGESSMURL")%>" alt="<%=objImages("IMAGESNAME")%>" border="0" /> 
<% 
objImages.MoveNext 
Loop 
%> 
+0

重复? http://stackoverflow.com/questions/2323550/paging-on-sql-server-database – 2010-02-24 04:44:53

+0

为什么你使用asp classic? – Hogan 2010-02-24 06:06:58

+0

使用Classic ASP的地方仍然很多。我正在谋生。它像COBOL一样,它还没有消失。 – Taptronic 2011-07-20 13:28:42

回答

1

尝试增加其他“)A”的地方之前,改变I.imagesid为A.imagesid:

SQL = SQL & " FROM IMAGES I) A" 
    SQL = SQL & " WHERE Row > ("& RecordsPageSize - RecordsPerPage &") AND Row <= ("& RecordsPageSize &") ORDER BY A.IMAGESID DESC" 

错误消息告诉你,你可以通过在不使用命令子查询。

+0

现在,我得到“[Microsoft] [ODBC SQL Server驱动程序] [SQL Server]关键字'ORDER'附近的语法不正确。” – zurna 2010-02-24 04:24:41

+0

嗯,我试图简化这个例子。但是我明白你的观点,我错误地忘记删除子查询。不过,尽管您提供的最新代码对我来说似乎是正确的,但现在我得到了一个不同的错误。 “[Microsoft] [ODBC SQL Server驱动程序] [SQL Server]无效的列名称'行'。” – zurna 2010-02-24 04:29:27

+0

我纠正了第一段代码。我错过了子查询的名称,所以我添加了)A和A.IMAGESID,而不是按顺序中的I.IMAGESID。 – 2010-02-24 04:31:21