主页 > 知识库 > SQL通用存储过程分页,支持多表联合

SQL通用存储过程分页,支持多表联合

热门标签:上海杨浦怎么申请申请400电话 山西防封卡电销卡套餐 地图标注多个行程 海外地图标注门市标 陕西人工外呼系统哪家好 铜川小型外呼系统运营商 云南外呼电销机器人系统 厦门商铺地图标注 浙江外呼系统怎么安装
SQLPager存储过程
复制代码 代码如下:

ALTER proc [dbo].[SqlPager]
(
@tblName varchar(255), -- 表名(注意:可以多表链接)
@strGetFields varchar(1000) = '*', -- 需要返回的列
@OrderfldName varchar(255)='', -- 排序的字段名
@PageSize int = 10, -- 页尺寸
@PageIndex int = 1, -- 页码
@doCount int = 1 output, --查询到的记录数
@OrderType bit = 0, -- 设置排序类型, 非 0 值则降序
@strWhere varchar(500) = '' -- 查询条件 (注意: 不要加 where)
)
AS
declare @strSQL nvarchar(4000) -- 主语句
declare @strTmp varchar(110) -- 临时变量
declare @strOrder varchar(300) -- 排序类型

if @strWhere != ''
set @strSQL = 'select @doCount=count(*) from ' + @tblName + ' where '+@strWhere
else
set @strSQL = 'select @doCount=count(*) from ' + @tblName
exec sp_executesql @strSQL,N'@doCount int out',@doCount out
--以上代码的意思是如果@doCount传递过来的不是0,就执行总数统计。以下的所有代码都是@doCount为0的情况
set @strSQL='';

if @OrderType != 0
begin
set @strTmp = '(select min'
set @strOrder = ' order by [' + @OrderfldName +'] desc'--如果@OrderType不是0,就执行降序,这句很重要!
end
else
begin
set @strTmp = '>(select max'
set @strOrder = ' order by [' + @OrderfldName +'] asc'
end
if @PageIndex = 1
begin
if @strWhere != ''
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from ' + @tblName + ' where ' + @strWhere + ' ' + @strOrder
else
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from '+ @tblName + ' '+ @strOrder--如果是第一页就执行以上代码,这样会加快执行速度
end
else
begin--以下代码赋予了@strSQL以真正执行的SQL代码
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from '
+ @tblName + ' where [' + @OrderfldName + ']' + @strTmp + '(['+ @OrderfldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['+ @OrderfldName + '] from ' + @tblName + ' ' + @strOrder + ') as tblTmp)'+ @strOrder
if @strWhere != ''
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from '
+ @tblName + ' where [' + @OrderfldName + ']' + @strTmp + '(['
+ @OrderfldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
+ @OrderfldName + '] from ' + @tblName + ' where ' + @strWhere + ' '
+ @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder
end
exec (@strSQL)

SQLHelper类中写执行存储过程 这是我的数据库操作类.方法有点老,还是三层架构.(mvc也应该差不多.我还木有试试.)
复制代码 代码如下:

/// summary>
/// 分页(存储过程) 用法例如下:
/// /summary>
/// param>表名(注意:可以多表链接)/param>
/// param>需要返回的列/param>
/// param>主键/param>
/// param>排序的字段名/param>
/// param>页尺寸/param>
/// param>页码/param>
/// param>查询到的记录数/param>
/// param>设置排序类型, desc、asc/param>
/// param>查询条件 (注意: 不要加 where)/param>
/// returns>/returns>
public static DataTable DbPager(
string tblName,
string strGetFields,
string PkeyfldName,
string OrderfldName,
int PageSize,
int PageIndex,
out int doCount,
string OrderType,
string strWhere)
{
SqlConnection con = new SqlConnection(ConnString.Value);
SqlDataAdapter da = new SqlDataAdapter("DbPager", con);
da.SelectCommand.CommandType = CommandType.StoredProcedure;
da.SelectCommand.Parameters.Add(new SqlParameter("@tblName", tblName));
da.SelectCommand.Parameters.Add(new SqlParameter("@strGetFields", strGetFields));
da.SelectCommand.Parameters.Add(new SqlParameter("@PkeyfldName", PkeyfldName));
da.SelectCommand.Parameters.Add(new SqlParameter("@OrderfldName", OrderfldName));
da.SelectCommand.Parameters.Add(new SqlParameter("@PageSize", PageSize));
da.SelectCommand.Parameters.Add(new SqlParameter("@PageIndex", PageIndex));
da.SelectCommand.Parameters.Add("@doCount", SqlDbType.Int);
da.SelectCommand.Parameters["@doCount"].Direction = ParameterDirection.Output;
da.SelectCommand.Parameters.Add(new SqlParameter("@OrderType", OrderType));
da.SelectCommand.Parameters.Add(new SqlParameter("@strWhere", strWhere));
DataSet ds = new DataSet();
da.Fill(ds);
doCount = Convert.ToInt32(da.SelectCommand.Parameters["@doCount"].Value);
return ds.Tables[0];
}
您可能感兴趣的文章:
  • 五种SQL Server分页存储过程的方法及性能比较
  • SQL Server 分页查询通用存储过程(只做分页查询用)
  • sqlserver2005利用临时表和@@RowCount提高分页查询存储过程性能示例分享
  • 深入sql server 2005 万能分页存储过程的详解
  • 基于Sql Server通用分页存储过程的解决方法
  • mssql 高效的分页存储过程分享
  • SQL Server 2005通用分页存储过程及多表联接应用
  • MSSQL MySQL 数据库分页(存储过程)
  • 三种SQL分页查询的存储过程代码
  • SQL分页查询存储过程代码分享

标签:孝感 自贡 许昌 常州 信阳 朔州 莱芜 西双版纳

巨人网络通讯声明:本文标题《SQL通用存储过程分页,支持多表联合》,本文关键词  SQL,通用,存储,过程,分页,;如发现本文内容存在版权问题,烦请提供相关信息告之我们,我们将及时沟通与处理。本站内容系统采集于网络,涉及言论、版权与本站无关。
  • 相关文章
  • 下面列出与本文章《SQL通用存储过程分页,支持多表联合》相关的同类信息!
  • 本页收集关于SQL通用存储过程分页,支持多表联合的相关信息资讯供网民参考!
  • 推荐文章