IF(@DoCount=1)
--if do count, return the count simply
EXEC('SELECT count(*) FROM '+@FromStatement+' WHERE 1=1 '+@WhereStatement)
ELSE
BEGIN
declare @nCount as int
declare @nTotalPage As int
declare @sSelectCopy As nvarchar(2000)
declare @TempTable As nvarchar(100)
if isnull(@WhereStatement,'') = ''
begin
set @WhereStatement = '1=1'
end
else
begin
set @WhereStatement = right(ltrim(@WhereStatement),len(ltrim(@WhereStatement))-3)
end
if isnull(@OrderByExpression,'') = ''
begin
set @OrderByExpression = '1'
end
set @SelectStatement = 'select top 100000000 ' + @SelectStatement
--新改的
declare @sql nvarchar(4000)
set @sql=N'select a.* , identity(int,1,1) as NumberIndex into tempTablePage1 from (' + @SelectStatement + ' from ' + @FromStatement + ' where ' + @WhereStatement + ' order by ' + @OrderByExpression + ' ' + @AscOrDesc +') as a'
+N' set @nCount = (select max(NumberIndex) from tempTablePage1)'
+N' if @nCount % @PageSize > 0 '
+N' set @nTotalPage = @nCount / @PageSize + 1'
+N' else'
+N' set @nTotalPage = @nCount / @PageSize'
+N' if @PageIndex <= 0 '
+N' set @PageIndex = 1'
+N' else if @PageIndex > @nTotalPage'
+N' set @PageIndex = @nTotalPage'
+N' if @PageIndex < @nTotalPage'
+N' select * from tempTablePage1 where NumberIndex between (@PageIndex - 1)*@PageSize + 1 and @PageIndex*@PageSize'
+N' else if @PageIndex = @nTotalPage'
+N' select * from tempTablePage1 where NumberIndex between (@PageIndex-1)*@PageSize + 1 and @nCount '
EXEC(@sql)
IF(@DoCount=1)
--if do count, return the count simply
EXEC('SELECT count(*) FROM '+@FromStatement+' WHERE 1=1 '+@WhereStatement)
ELSE
BEGIN
declare @nCount as int
declare @nTotalPage As int
declare @sSelectCopy As nvarchar(2000)
declare @TempTable As nvarchar(100)
if isnull(@WhereStatement,'') = ''
begin
set @WhereStatement = '1=1'
end
else
begin
set @WhereStatement = right(ltrim(@WhereStatement),len(ltrim(@WhereStatement))-3)
end
if isnull(@OrderByExpression,'') = ''
begin
set @OrderByExpression = '1'
end
set @SelectStatement = 'select top 100000000 ' + @SelectStatement
--下面是新改的
while (select 1 from sysobjects where id = object_id('tempTablePage1') and type = 'U')>0
WAITFOR DELAY '00:00:00.100' --说明有人正在执行此存储过程,所以需要等别人执行完,才能往下运行
exec ('select a.* , identity(int,1,1) as NumberIndex into tempTablePage1 from (' + @SelectStatement + ' from ' + @FromStatement + ' where ' + @WhereStatement + ' order by ' + @OrderByExpression + ' ' + @AscOrDesc +') as a')
set @nCount = (select max(NumberIndex) from tempTablePage1)
if @nCount % @PageSize > 0
begin
set @nTotalPage = @nCount / @PageSize + 1
end
else
begin
set @nTotalPage = @nCount / @PageSize
end
if @PageIndex <= 0
begin
set @PageIndex = 1
end
else if @PageIndex > @nTotalPage
begin
set @PageIndex = @nTotalPage
end
if @PageIndex < @nTotalPage
begin
select * from tempTablePage1 where NumberIndex between (@PageIndex - 1)*@PageSize + 1 and @PageIndex*@PageSize
end
else if @PageIndex = @nTotalPage
begin
select * from tempTablePage1 where NumberIndex between (@PageIndex-1)*@PageSize + 1 and @nCount
end
IF(@DoCount=1)
--if do count, return the count simply
EXEC('SELECT count(*) FROM '+@FromStatement+' WHERE 1=1 '+@WhereStatement)
ELSE
BEGIN
declare @nCount as int
declare @nTotalPage As int
declare @sSelectCopy As nvarchar(2000)
declare @TempTable As nvarchar(100)
if isnull(@WhereStatement,'') = ''
begin
set @WhereStatement = '1=1'
end
else
begin
set @WhereStatement = right(ltrim(@WhereStatement),len(ltrim(@WhereStatement))-3)
end
if isnull(@OrderByExpression,'') = ''
begin
set @OrderByExpression = '1'
end
if exists (select 1 from sysobjects where id = object_id('#tempTablePage1') and type = 'U')
begin
drop table #tempTablePage1
end
set @SelectStatement = 'select top 100000000 ' + @SelectStatement
--创建一个临时表
exec (N'select a.* , identity(int,1,1) as NumberIndex into #tempTablePage1 from (' + @SelectStatement + N' from ' + @FromStatement + N' where ' + @WhereStatement + N' order by ' + @OrderByExpression + ' ' + @AscOrDesc +N') as a'
+N' set '+@nCount+N' = (select max(NumberIndex) from #tempTablePage1) '
+N' if '+@nCount+N' % '+@PageSize+N' > 0 '
+N' begin '
+N' set '+@nTotalPage+N' = '+@nCount+N' / '+@PageSize+N' + 1 '
+N' end '
+N' else '
+N' begin '
+N' set '+@nTotalPage+N' = '+@nCount+N' / '+@PageSize
+N' end '
+N' if '+@PageIndex+N' <= 0 '
+N' begin '
+N' set '+@PageIndex+N' = 1 '
+N' end '
+N' else if '+@PageIndex+N' > '+@nTotalPage
+N' begin '
+N' set '+@PageIndex+N' = '+@nTotalPage
+N' end '
+N' if '+@PageIndex+N' < '+@nTotalPage
+N' begin '
+N' select * from #tempTablePage1 where NumberIndex between ('+@PageIndex+N' - 1)*'+@PageSize+N' + 1 and '+@PageIndex+N'*'+@PageSize
+N' end '
+N' else if '+@PageIndex+N' = '+@nTotalPage
+N' begin '
+N' select * from #tempTablePage1 where NumberIndex between ('+@PageIndex+N'-1)*'+@PageSize+N' + 1 and '+@nCount
+N' end '
)
if exists (select 1 from sysobjects where id = object_id('#tempTablePage1') and type = 'u')
begin
drop table #tempTablePage1
end
IF(@DoCount=1)
--if do count, return the count simply
EXEC('SELECT count(*) FROM '+@FromStatement+' WHERE 1=1 '+@WhereStatement)
ELSE
BEGIN
declare @nCount as int
declare @nTotalPage As int
declare @sSelectCopy As nvarchar(2000)
declare @TempTable As nvarchar(100)
if isnull(@WhereStatement,'') = ''
begin
set @WhereStatement = '1=1'
end
else
begin
set @WhereStatement = right(ltrim(@WhereStatement),len(ltrim(@WhereStatement))-3)
end
if isnull(@OrderByExpression,'') = ''
begin
set @OrderByExpression = '1'
end
set @SelectStatement = 'select top 100000000 ' + @SelectStatement
--新改的
declare @sql nvarchar(4000)
set @sql=N'select a.* , identity(int,1,1) as NumberIndex into #tempTablePage1 from (' + @SelectStatement + ' from ' + @FromStatement + ' where ' + @WhereStatement + ' order by ' + @OrderByExpression + ' ' + @AscOrDesc +') as a'
+N' set @nCount = (select max(NumberIndex) from #tempTablePage1)'
+N' if @nCount % @PageSize > 0 '
+N' set @nTotalPage = @nCount / @PageSize + 1'
+N' else'
+N' set @nTotalPage = @nCount / @PageSize'
+N' if @PageIndex <= 0 '
+N' set @PageIndex = 1'
+N' else if @PageIndex > @nTotalPage'
+N' set @PageIndex = @nTotalPage'
+N' if @PageIndex < @nTotalPage'
+N' select * from #tempTablePage1 where NumberIndex between (@PageIndex - 1)*@PageSize + 1 and @PageIndex*@PageSize'
+N' else if @PageIndex = @nTotalPage'
+N' select * from #tempTablePage1 where NumberIndex between (@PageIndex-1)*@PageSize + 1 and @nCount '
EXEC SP_EXECUTESQL @sql,N'@nCount int
,@PageSize int
,@nTotalPage int
,@PageIndex int ',
@nCount
,@PageSize
,@nTotalPage
,@PageIndex
exec ('select a.* , identity(int,1,1) as NumberIndex into tempTablePage1 from (' + @SelectStatement + ' from ' + @FromStatement + ' where ' + @WhereStatement + ' order by ' + @OrderByExpression + ' ' + @AscOrDesc +') as a')