sql分页存储过程!与asp.net分页控件一起使用
2007-07-18 10:18
1001 查看
/**/
/*
很强的分页存储过程,速度超快!
exec Paging_RowCount 1338,5,
'TItemMater inner join TItem on TItemMater.FItemID=TItem.FItemID ',
'TItemMater.FNumber',
'TItemMater.FItemID,TItemMater.Fnumber,TItemMater.FnameC,TItemMater.FnameE,TItemMater.FLevel,TItemMater.FLong,TItemMater.Fwidth,TItemMater.Fheight,TItemMater.Fmodel,(select FNameC from Titem where FItemID=TItemMater.FUnitID) as FUnitID,TItemMater.FAcr,TItemMater.Fcub,TItemMater.FTpPs,TItemMater.Fweight,TItemMater.FJsPrice,TItemMater.FCbPrice,TItemMater.FSd,TItemMater.Flow,TItemMater.Fhigh,TItemMater.Fsafe,TItemMater.Fhour,TItemMater.FNote,TItemMater.F_1,TItem.FUnused ',
'Titem.FDeleted=0 and Titem.FUnused=0',
''
drop Proc Paging_RowCount
*/
CREATE
PROCEDURE
Paging_RowCount
(
@PageNumber
int
=
1
,
@PageSize
int
=
10
,
@Tables
varchar
(
1000
),
@Sort
varchar
(
200
)
=
NULL
,
@Fields
varchar
(
1000
)
=
'
*
'
,
@Filter
varchar
(
1000
)
=
NULL
,
@Group
varchar
(
1000
)
=
NULL
)
AS
DECLARE
@SortTable
varchar
(
100
)
DECLARE
@SortName
varchar
(
100
)
DECLARE
@strSortColumn
varchar
(
200
)
DECLARE
@operator
char
(
2
)
DECLARE
@type
varchar
(
100
)
DECLARE
@prec
int
/**/
/*
Set sorting variables.
*/
IF
CHARINDEX
(
'
DESC
'
,
@Sort
)
>
0
BEGIN
SET
@strSortColumn
=
REPLACE
(
@Sort
,
'
DESC
'
,
''
)
SET
@operator
=
'
<=
'
END
ELSE
BEGIN
IF
CHARINDEX
(
'
ASC
'
,
@Sort
)
=
0
SET
@strSortColumn
=
REPLACE
(
@Sort
,
'
ASC
'
,
''
)
SET
@operator
=
'
>=
'
END
IF
CHARINDEX
(
'
.
'
,
@strSortColumn
)
>
0
BEGIN
SET
@SortTable
=
SUBSTRING
(
@strSortColumn
,
0
,
CHARINDEX
(
'
.
'
,
@strSortColumn
))
SET
@SortName
=
SUBSTRING
(
@strSortColumn
,
CHARINDEX
(
'
.
'
,
@strSortColumn
)
+
1
,
LEN
(
@strSortColumn
))
END
ELSE
BEGIN
SET
@SortTable
=
@Tables
SET
@SortName
=
@strSortColumn
END
SELECT
@type
=
t.name,
@prec
=
c.prec
FROM
sysobjects o
JOIN
syscolumns c
on
o.id
=
c.id
JOIN
systypes t
on
c.xusertype
=
t.xusertype
WHERE
o.name
=
@SortTable
AND
c.name
=
@SortName
IF
CHARINDEX
(
'
char
'
,
@type
)
>
0
SET
@type
=
@type
+
'
(
'
+
CAST
(
@prec
AS
varchar
)
+
'
)
'
DECLARE
@strPageSize
varchar
(
50
)
DECLARE
@strStartRow
varchar
(
50
)
DECLARE
@strFilter
varchar
(
1000
)
DECLARE
@strSimpleFilter
varchar
(
1000
)
DECLARE
@strGroup
varchar
(
1000
)
/**/
/*
Default Page Number
*/
IF
@PageNumber
<
1
SET
@PageNumber
=
1
/**/
/*
Set paging variables.
*/
SET
@strPageSize
=
CAST
(
@PageSize
AS
varchar
(
50
))
SET
@strStartRow
=
CAST
(((
@PageNumber
-
1
)
*
@PageSize
+
1
)
AS
varchar
(
50
))
/**/
/*
Set filter & group variables.
*/
IF
@Filter
IS
NOT
NULL
AND
@Filter
!=
''
BEGIN
SET
@strFilter
=
'
WHERE
'
+
@Filter
+
'
'
SET
@strSimpleFilter
=
'
AND
'
+
@Filter
+
'
'
END
ELSE
BEGIN
SET
@strSimpleFilter
=
''
SET
@strFilter
=
''
END
IF
@Group
IS
NOT
NULL
AND
@Group
!=
''
SET
@strGroup
=
'
GROUP BY
'
+
@Group
+
'
'
ELSE
SET
@strGroup
=
''
/**/
/*
Execute dynamic query
*/
EXEC
(
'
DECLARE @SortColumn
'
+
@type
+
'
SET ROWCOUNT
'
+
@strStartRow
+
'
SELECT @SortColumn=
'
+
@strSortColumn
+
'
FROM
'
+
@Tables
+
@strFilter
+
'
'
+
@strGroup
+
'
ORDER BY
'
+
@Sort
+
'
SET ROWCOUNT
'
+
@strPageSize
+
'
SELECT
'
+
@Fields
+
'
FROM
'
+
@Tables
+
'
WHERE
'
+
@strSortColumn
+
@operator
+
'
@SortColumn
'
+
@strSimpleFilter
+
'
'
+
@strGroup
+
'
ORDER BY
'
+
@Sort
+
'
--select count(*) as RecordCount,case when(count(*)%
'
+
@PageSize
+
'
>0) then count(*)/
'
+
@PageSize
+
'
+1 else count(*)/
'
+
@PageSize
+
'
end as PageCount FROM
'
+
@Tables
+
@strFilter
+
'
'
)
GO
相关文章推荐
- 自定义分页控件UI,从Discuz截取,配合SQL自定义分页存储过程一起使用
- asp.net的DataGrid分页控件,在Oracle数据库下,每次只取当前页的数据,不使用存储过程。
- 在asp.net mvc中创建使用Linq to sql的分页控件
- ASP.NET分页存储过程自定义用户控件
- ASP.NET分页存储过程自定义用户控件
- asp.net SQL存储过程分页
- 在asp.net mvc中创建使用Linq to sql的分页控件[转]
- asp.net结合aspnetpager使用SQL2005的存储过程分页(转)
- 通用SQL存储过程分页以及asp.net后台调用的方法
- asp.net之DataList的使用方法,及分页(存储过程创建),编辑,更新,删除
- asp.net(c#) 下SQL存储过程使用详细实例
- asp.net之DataList的使用方法,及分页(存储过程创建),编辑,更新,删除 .
- asp.net中常用到的SQL分页存储过程
- ASP.NET调用sql存储过程使用GridView显示
- asp.net之DataList的使用方法,及分页(存储过程创建),编辑,更新,删除
- asp.net SQL存储过程分页
- ASP.NET分页存储过程自定义用户控件
- asp.net分页的SQL语句及存储过程
- 通用SQL存储过程分页以及asp.net后台调用