create procedure ididid <br>(@pagesize int,<br>@pageindex int,<br>@docount bit)<br>as<br><br>if(@docount=1)<br>select count(*) from idid where id > 10<br>else<br>begin<br> with temptbl as (<br>SELECT ROW_NUMBER() OVER (ORDER BY id desc)AS Row, * from idid where id > 10)<br> SELECT * FROM temptbl where Row between (@pageindex-1)*@pagesize+1 and (@pageindex-1)*@pagesize+@pagesize<br>end<br><br><br>这上面是工具生成的(用的2005)<br>里面代码貌似首先会选择所有行,这样会存在性能问题吧,数据较多的话,不就完了?
回复:这其中用了SQL Server 2005中的一个新函数ROW_NUMBER(),是否会选择所有行我没有深入研究过,不过在SQL Server 2005中,这个方法分页效率是最高的,您还有更好的办法吗?