フォルダーとそのコンテンツでインデックス サービスを使用する ASP.net 2.0 イントラネット サイトがあります。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