■SQLで指定行を取得
//ROW_NUMBER 遅いときもある
string sql = string.Format("SELECT x.* FROM (" + table + ") x WHERE x.rownum BETWEEN {0} AND {1} ORDER BY x.rownum", start + 1, max + start);
※table のSELECT句に
ROW_NUMBER() OVER (ORDER BY <項目> DESC) AS rownum
を追加しておく
//SQL Server 2008以前 早い時もある
string sql = "SELECT TOP " + max.ToString() + " * FROM (" + table + ") a" +
" WHERE <主キー> NOT IN (SELECT TOP " + start.ToString() + " <主キー> FROM (" + table + ") b ORDER BY <主キー> DESC)" +
" ORDER BY <主キー> DESC";
//SQL Server 2012以降 早い
string sql = "SELECT * FROM (" + table + ") a" +
" ORDER BY <項目> DESC" +
" OFFSET " + start.ToString() + " ROWS" +
" FETCH NEXT " + max.ToString() + " ROWS ONLY";