为了寻找一个高效的存储过程,对C#+mssql如下存储过程分页进行了测试,测试条件:
环境:VS2008+MSSQ2000
数据量:200万
对如下两个存储过程进行测试:
第一个:
CREATE procedure GetPageNoStr
(
@Sql nvarchar(2000),
@CurrentPage int=1,
@PageSize int=20,
@Order nvarchar(1000)=null
)
as
declare @P1 INT
declare @Sql1 nvarchar(4000) Set @Sql1=stuff(@Sql,7,charindex('from',@Sql)-7,' Count(*) ')
if(@Order<>'' and @Order is not null)
set @sql=@sql+' Order By '+@Order
--//注意:@scrollopt = 1 会取得Select的时候的总行数
exec sp_cursoropen @P1 output, @Sql, @scrollopt =2
if (@P1 != 0)
begin
set @CurrentPage = (@CurrentPage - 1) * @PageSize + 1
exec sp_cursorfetch @P1, 32, @CurrentPage, @PageSize
exec sp_cursorclose @P1
end
exec(@Sql1)
GO
第二个:
CREATE PROCEDURE [dbo].[GetPageStr]
(
@Table_Name varchar(5000), --表名
@Sign_Record varchar(50), --主键
@Filter_Condition