CREATE PROCEDURE sp_page
@tb varchar(50), --表名
@col varchar(50), --按该列来进行分页
@coltype int, --@col列的类型,0-数字类型,1-字符类型,2-日期时间类型
@orderby bit, --排序,0-顺序,1-倒序
@collist varchar(800),--要查询出的字段列表,*表示全部字段
@pagesize int, --每页记录数
@page int, --指定页
@condition varchar(800),--查询条件
@pages int OUTPUT --总页数
AS
DECLARE @sql nvarchar(4000),@where1 varchar(800),@where2 varchar(800)
IF @condition is null or rtrim(@condition)=''
BEGIN--没有查询条件
SET @where1=' WHERE '
SET @where2=' '
END
ELSE
BEGIN--有查询条件
SET @where1=' WHERE ('+@condition+') AND '--本来有条件再加上此条件
SET @where2=' WHERE ('+@condition+') '--原本没有条件而加上此条件
END
SET @sql='SELECT @pages=CEILING((COUNT(*)+0.0)/'+CAST(@pagesize AS varchar)+
') FROM '+@tb+@where2
EXEC sp_executesql @sql,N'@pages int OUTPUT',@pages OUTPUT--计算总页数
IF @orderby=0
SET @sql='SELECT TOP '+CAST(@pagesize AS varchar)+' '+@collist+
' FROM '+@tb+@where1+@col+'>(SELECT MAX('+@col+') '+
' FROM (SELECT TOP '+CAST(@pagesize*(@page-1) AS varchar)+' '+
@col+' FROM '+@tb+@where2+'ORDER BY '+@col+') t) ORDER BY '+@col
ELSE
SET @sql='SELECT TOP '+CAST(@pagesize AS varchar)+' '+@collist+
' FROM '+@tb+@where1+@col+'<(SELECT MIN('+@col+') '+
' FROM (SELECT TOP '+CAST(@pagesize*(@page-1) AS varchar)+' '+
@col+' FROM '+@tb+@where2+'ORDER BY '+@col+' DESC) t) ORDER BY '+
@col+' DESC'
IF @page=1--第一页
SET @sql='SELECT TOP '+CAST(@pagesize AS varchar)+' '+@collist+' FROM '+@tb+
@where2+'ORDER BY '+@col+CASE @orderby WHEN 0 THEN '' ELSE ' DESC' END
EXEC(@sql)
GO
@tb varchar(50), --表名
@col varchar(50), --按该列来进行分页
@coltype int, --@col列的类型,0-数字类型,1-字符类型,2-日期时间类型
@orderby bit, --排序,0-顺序,1-倒序
@collist varchar(800),--要查询出的字段列表,*表示全部字段
@pagesize int, --每页记录数
@page int, --指定页
@condition varchar(800),--查询条件
@pages int OUTPUT --总页数
AS
DECLARE @sql nvarchar(4000),@where1 varchar(800),@where2 varchar(800)
IF @condition is null or rtrim(@condition)=''
BEGIN--没有查询条件
SET @where1=' WHERE '
SET @where2=' '
END
ELSE
BEGIN--有查询条件
SET @where1=' WHERE ('+@condition+') AND '--本来有条件再加上此条件
SET @where2=' WHERE ('+@condition+') '--原本没有条件而加上此条件
END
SET @sql='SELECT @pages=CEILING((COUNT(*)+0.0)/'+CAST(@pagesize AS varchar)+
') FROM '+@tb+@where2
EXEC sp_executesql @sql,N'@pages int OUTPUT',@pages OUTPUT--计算总页数
IF @orderby=0
SET @sql='SELECT TOP '+CAST(@pagesize AS varchar)+' '+@collist+
' FROM '+@tb+@where1+@col+'>(SELECT MAX('+@col+') '+
' FROM (SELECT TOP '+CAST(@pagesize*(@page-1) AS varchar)+' '+
@col+' FROM '+@tb+@where2+'ORDER BY '+@col+') t) ORDER BY '+@col
ELSE
SET @sql='SELECT TOP '+CAST(@pagesize AS varchar)+' '+@collist+
' FROM '+@tb+@where1+@col+'<(SELECT MIN('+@col+') '+
' FROM (SELECT TOP '+CAST(@pagesize*(@page-1) AS varchar)+' '+
@col+' FROM '+@tb+@where2+'ORDER BY '+@col+' DESC) t) ORDER BY '+
@col+' DESC'
IF @page=1--第一页
SET @sql='SELECT TOP '+CAST(@pagesize AS varchar)+' '+@collist+' FROM '+@tb+
@where2+'ORDER BY '+@col+CASE @orderby WHEN 0 THEN '' ELSE ' DESC' END
EXEC(@sql)
GO
ALTER PROCEDURE page_list_test
(@TBname VarChar(50),
@pagesize int,
@pageindex int,
@docount bit,
@name VarChar(50),
@clound VarChar(50))
as
set nocount on
declare @RecordCount intif(@docount=1)EXEC('select count(*) from '+ ' ' +@TBname+ ' '+'where' +' '+@clound+'='+''''+@name+'''')
else
begin
if(@pageindex=1)
exec('select top '+@pagesize+'* from '+' '+@TBname+' '+'where' +' '+@clound+'='+''''+@name+'''' +'order by id desc')
else
begin
declare @sql varchar(4000)
declare @PageUpperBound int
declare @endrecords int
set @PageUpperBound=@pageindex*@pagesize
if(@PageUpperBound-@pagesize)>=@RecordCount
select ''
else if(@RecordCount-(@PageUpperBound-@pagesize)<=@pagesize)begin
set @endrecords=@RecordCount-(@PageUpperBound-@pagesize)
set @sql =@sql +'select * from (select top '+@endrecords+' * from'+@TBname+'where'+ @clound+'='+''''+@name+''''+' order by id)A order by id desc'
EXEC @sql
end
else
begin
set @sql =@sql +'select * from (select top '+' '+@pagesize+'* from (select top '+@PageUpperBound+' * from '+@TBname+'where'+ @clound+'='+''''+@name+''''+' order by id desc)A order by id)B order by id desc'
EXEC @sql
end
end
end
set nocount off
GO
将 varchar 值 '* from (select top ' 转换为数据类型为 int 的列时发生语法错误。
set @sql =@sql +'select * from (select top '+' '+@pagesize+'* from (select top '+@PageUpperBound+' * from '+@TBname+'where'+ @clound+'='+''''+@name+''''+' order by id desc)A order by id)B order by id desc'还是老问题 就不知道这句哪里错了!!!
还怎么PRINT啊
CREATE PROCEDURE page_list_test(@TBname VarChar(50),
@pagesize int,
@pageindex int,
@docount bit,
@name VarChar(50),
@clound VarChar(50))
as
set nocount on
declare @RecordCount int
if(@docount=1)EXEC('select count(*) from '+ ' ' +@TBname+ ' '+'where' +' '+@clound+'='+''''+@name+'''')
else
begin
if(@pageindex=1)
exec('select top '+@pagesize+'* from '+' '+@TBname+' '+'where' +' '+@clound+'='+''''+@name+'''' +'order by id desc')
else
begin
declare @sql varchar(4000)
declare @PageUpperBound VarChar(50)
declare @endrecords VarChar(50)
set @PageUpperBound=@pageindex*@pagesize
if(@PageUpperBound-@pagesize)>=@RecordCount
select ''
else if(@RecordCount-(@PageUpperBound-@pagesize)<=@pagesize)begin
set @endrecords=@RecordCount-(@PageUpperBound-@pagesize)
set @sql =@sql +'select * from (select top '+cast(@endrecords as varchar)+' * from'+@TBname+'where'+ @clound+'='+''''+@name+''''+' order by id)A order by id desc'
EXEC @sql
end
else
begin
set @sql =@sql +'select * from (select top '+' '+cast(@pagesize as varchar) +' * from (select top '+cast(@PageUpperBound as varchar)+' * from '+@TBname+'where'+ @clound+'='+''''+@name+''''+' order by id desc)A order by id)B order by id desc'
EXEC @sql
end
end
end
set nocount off
GO
convert(varchar,@pagesize)set @sql =@sql +'select * from (select top '+' '+ convert(varchar,@pagesize)+'* from (select top '+@PageUpperBound+' * from '+@TBname+'where'+ @clound+'='+''''+@name+''''+' order by memberid desc)A order by memberid)B order by memberid desc'