我有一个 ASP.net 2.0 Intranet 站点,它在文件夹及其内容上使用索引服务。OLEDB 用于通过使用此处讨论的相同技术来查询此文件夹中的文件。这是由另一位开发人员编写的,但我开始了解他的工作方式。
但是现在客户抱怨页面加载时间长,因为文件夹中的所有文件都被一次查询。他们对它很慢的事实是正确的,所以我考虑使用分页(就像在 linq Skip().Take() 中一样)。我知道在 SQL 中这翻译为:
SELECT col1, col2
FROM
(
SELECT col1, col2, ROW_NUMBER() OVER (ORDER BY ID) AS RowNum
FROM MyTable
)
AS MyDerivedTable
WHERE MyDerivedTable.RowNum BETWEEN @startRow AND @endRow
但由于某种原因,这在与 OLEDB 一起使用时不起作用。这使用了哪个版本的 SQL,或者你们有没有关于如何实现分页的建议?
编辑:因为上述方法仅在使用 sql Server 2005 或更高版本时可用,所以我将尝试 2005 年之前的方法。我认为 OLEDB 不支持 Row_Number() 或 Over。打算试试:
SELECT ... FROM Table WHERE PK IN
(SELECT TOP @PageSize PK FROM Table WHERE PK NOT IN
(SELECT TOP @StartRow PK FROM Table ORDER BY SortColumn)
ORDER BY SortColumn)
ORDER BY SortColumn