USE
[
WebE
]
GO
/*
***** 对象: StoredProcedure [dbo].[P_TablePaginationSearch] 脚本日期: 07/29/2010 20:36:21 *****
*/
SET
ANSI_NULLS
ON
GO
SET
QUOTED_IDENTIFIER
ON
GO
CREATE
procedure
[
dbo
]
.
[
P_TablePaginationSearch
]
(
@SelectField
nvarchar
(
512
)
=
'
*
'
--
Select语句字段,调用的时候不要输入"select"
,
@FormTables
nvarchar
(
512
)
--
Form子句,表名,包括架构名,调用的时候不要输入"from"
,
@WhereField
nvarchar
(
512
)
=
null
--
Where语句、判断字段,调用的时候不要输入"where"
--
---------------------------------------------------
,
@OverPartitionField
nvarchar
(
512
)
=
null
--
分区字段,
,
@OverOrderField
nvarchar
(
512
)
--
分页字段,主要排序字段,必须
,
@GroupField
nvarchar
(
512
)
=
null
--
分组字段
,
@HavingField
nvarchar
(
512
)
=
null
--
分组判断条件
,
@OrderField
nvarchar
(
512
)
=
null
--
排序字段
--
---------------------------------------------------
,
@PageSize
int
=
10
--
页长
,
@Page
int
=
1
--
页
--
---------------------------------------------------
,
@NewTempTable
varchar
(
100
)
=
''
--
新建临时表
--
----------------------------
,
@ErrorProcedure
nvarchar
(
128
)
=
null
output
--
错误存储过程名
,
@ErrorNumber
int
=
0
output
--
错误编号
,
@ErrorMessage
nvarchar
(
512
)
=
null
output
--
错误信息
)
as
begin
--
定义第一行记录
declare
@firstRow
int
;
--
定义最后一条记录
declare
@lastRow
int
;
--
设置第一条记录
set
@firstRow
=
((
@Page
-
1
)
*
@PageSize
)
+
1
;
--
设置最后一条记录
set
@lastRow
=
@firstRow
+
@PageSize
;
--
定义查询SQL字段
declare
@sqlString
nvarchar
(
512
);
--
定义Select语句,内查询使用
declare
@selectString
nvarchar
(
512
);
--
定义Where字段,内查询使用
declare
@whereString
nvarchar
(
512
);
--
定义Form子句,内查询使用
declare
@formString
nvarchar
(
512
);
--
定义分组字段,内查询使用
declare
@groupString
nvarchar
(
512
);
--
定义Having子句,内查询使用
declare
@havingString
nvarchar
(
512
);
--
定义排序字段,外查询使用
declare
@OrderString
nvarchar
(
512
);
declare
@select_Table
as
nvarchar
(
200
);
--
新建表
if
@NewTempTable
=
''
--
只是输出
set
@select_Table
=
'
select *
'
else
--
新建临时表
set
@select_Table
=
'
select * into
'
+
@NewTempTable
+
'
'
--
组装Select子句-----------------------------------
set
@SelectField
=
isnull
(
@SelectField
,N
'
*
'
);
if
(
@SelectField
=
''
)
set
@SelectField
=
N
'
*
'
;
--
组装select子句到row_number()
set
@selectString
=
N
'
select
'
+
@SelectField
+
'
, Row_Number() over(
'
;
--
组装到分区partition by 表达式
set
@OverPartitionField
=
isnull
(
@OverPartitionField
,N
''
);
if
(
@OverPartitionField
<>
''
)
set
@selectString
=
@selectString
+
'
partition by
'
+
@OverPartitionField
;
--
组装到排序分页order by 表达式
set
@OverOrderField
=
isnull
(
@OverOrderField
,N
''
);
if
(
@OverOrderField
<>
''
)
set
@selectString
=
@selectString
+
'
order by
'
+
@OverOrderField
+
N
'
) as RowNumber
'
;
--
over---------------------------------------------
--
组装Form子句------------------------------------
set
@formString
=
N
'
from
'
+
@FormTables
;
--
组装Where判断子句------------------------------
set
@WhereField
=
isnull
(
@WhereField
,N
''
);
if
(
@WhereField
<>
''
)
set
@whereString
=
N
'
where
'
+
@WhereField
;
else
set
@whereString
=
N
''
;
--
where判断子句组装完毕-------------------------
--
组装group by分组子句--------------------------
set
@GroupField
=
isnull
(
@GroupField
,N
''
);
if
(
@GroupField
<>
''
)
begin
set
@groupString
=
N
'
group by
'
+
@GroupField
;
--
组装having分组判断条件
set
@HavingField
=
isnull
(
@HavingField
,N
''
);
if
(
@HavingField
<>
N
''
)
set
@havingString
=
N
'
having
'
+
@HavingField
;
else
set
@havingString
=
N
''
;
end
else
begin
set
@groupString
=
N
''
;
set
@havingString
=
N
''
;
end
--
over-------------------------------------------
--
组装order by外排序子句-----------------------
set
@OrderField
=
isnull
(
@OrderField
,N
''
);
if
(
@OrderField
<>
''
)
set
@OrderString
=
N
'
order by
'
+
@OverOrderField
+
N
'
,
'
+
@OrderField
;
else
set
@OrderString
=
N
''
;
--
如果@groupString不为空,则外排序不起作用
if
(
@groupString
<>
N
''
)
set
@OrderString
=
N
''
;
--
over-------------------------------------------
--
组装分页查询语句
set
@sqlString
=
--
N'select * '+
@select_Table
+
N
'
from
'
+
N
'
(
'
+
@selectString
+
@formString
+
@whereString
+
@groupString
+
@havingString
+
N
'
) as TB
'
+
N
'
where
'
+
N
'
TB.RowNumber>=
'
+
cast
(
@firstRow
as
nvarchar
(
10
))
+
N
'
and TB.RowNumber<
'
+
cast
(
@lastRow
as
nvarchar
(
10
))
+
@orderString
--
over-------------------------------------------
--
执行SQL,返回影响行数;如有异常,则抛出,并赋值输出参数
begin
try
print
'
@sqlString =
'
+
@sqlString
;
exec
(
@sqlString
);
return
@@rowcount
;
end
try
begin
catch
set
@ErrorProcedure
=
Error_Procedure();
set
@ErrorNumber
=
error_number();
set
@ErrorMessage
=
error_message();
end
catch;
end