ページング

■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";