REATE
PROCEDURE
page
@tblName
varchar
(255),
-- 表名
@strGetFields
varchar
(1000) =
‘*‘
,
-- 需要返回的列
@fldName
varchar
(255)=
‘id‘
,
-- 排序的字段名
@PageSize
int
= 10,
-- 页尺寸
@PageIndex
int
= 1,
-- 页码
@doCount
bit
= 0,
-- 返回记录总数, 非 0 值则返回
@OrderType
bit
= 0,
-- 设置排序类型, 非 0 值则降序 0:asc 1:desc
@strWhere
varchar
(1500) =
‘‘
,
-- 查询条件 (注意: 不要加 where)
@ID nvarchar(50)=
‘id‘
--主表的列。。最好是主键
AS
declare
@strSQL
varchar
(5000)
-- 主语句
declare
@strTmp
varchar
(110)
-- 临时变量
declare
@strOrder
varchar
(400)
-- 排序类
if @doCount != 0
begin
if @strWhere !=
‘‘
set
@strSQL =
‘select count(*) as Total from ‘
+ @tblName+
‘ where ‘
[email protected]
else
set
@strSQL =
‘select count(*) as Total from ‘
+ @tblName +
‘‘
end
--以上代码的意思是如果@doCount传递过来的不是0,就执行总数统计。以下的所有代码都是@doCount为0的情况
else
begin
if @OrderType != 0
begin
set
@strTmp =
‘<(select min‘
set
@strOrder =
‘ order by ‘
+ @fldName +
‘ desc‘
--如果@OrderType不是0,就执行降序,这句很重要!
end
else
begin
set
@strTmp =
‘>(select max‘
set
@strOrder =
‘ order by ‘
+ @fldName +
‘ asc‘
end
if @PageIndex = 1
begin
if @strWhere !=
‘‘
set
@strSQL =
‘select top ‘
+ str(@PageSize) +
‘ ‘
[email protected]+
‘ from ‘
+ @tblName +
‘ where ‘
+ @strWhere +
‘ ‘
+ @strOrder
else
set
@strSQL =
‘select top ‘
+ str(@PageSize) +
‘ ‘
[email protected]+
‘ from ‘
+ @tblName +
‘ ‘
+ @strOrder
--如果是第一页就执行以上代码,这样会加快执行速度
end
else
begin
--以下代码赋予了@strSQL以真正执行的SQL代码
set
@strSQL =
‘select top ‘
+ str(@PageSize) +
‘ ‘
[email protected]+
‘ from ‘
+ @tblName +
‘ where ‘
+ @fldName +
‘ ‘
+ @strTmp +
‘( ‘
+ @ID +
‘ ) from (select top ‘
+ str((@PageIndex-1)*@PageSize) +
‘ ‘
+ @fldName +
‘ from ‘
+ @tblName + @strOrder +
‘) as tblTmp)‘
+ @strOrder
if @strWhere !=
‘‘
set
@strSQL =
‘select top ‘
+ str(@PageSize) +
‘ ‘
[email protected]+
‘ from ‘
+ @tblName +
‘ where ‘
+ @fldName +
‘ ‘
+ @strTmp +
‘(‘
+ @ID +
‘) from (select top ‘
+ str((@PageIndex-1)*@PageSize) +
‘ ‘
+ @fldName +
‘ from ‘
+ @tblName +
‘ where ‘
+ @strWhere +
‘ ‘
+ @strOrder +
‘) as tblTmp) and ‘
+ @strWhere +
‘ ‘
+ @strOrder
end
end
exec
(@strSQL)