SQL2008多个查询条件分页查询脚本(原创)
SQL2008多个查询条件分页查询脚本(原创)返回查询表指定字段,结果集最后一个字段返回总页数,用于【最后一页】传参数。
【第一页】 【上一页】【下一页】【最后一页】
SQL Code:
ALTER PROCEDURE seo_GetURLs
@Status NVARCHAR(50), --已收录/未收录/全部
@Title NVARCHAR(50), --文章标题,模糊匹配
@FlagSEO VARCHAR(1), --SEO标识的文章
@PageNo INT,--当前页码,从1开始
@PageSize INT--每页记录数
AS
BEGIN
/*******************************************************
分页查询
SELECT TOP 10 * FROM tb_Article
seo_GetURLs '未收录','','Y',1,10
seo_GetURLs '未收录','','N',1,10
seo_GetURLs '','','Y',1,10
go
seo_GetURLs '','','Y',7,10
********************************************************/
--兼容性检查
IF @PageNo<=0 SET @PageNo=1;
IF @PageSize<=0 SET @PageSize=10;
--计算起始序号和截止序号
DECLARE @StartIndex INT,@EndIndex INT
SELECT @StartIndex=(@PageNo-1)*@PageSize+1;
SELECT @EndIndex=@PageNo*@PageSize;
-------------------------------------------------------------
--临时表(记录主键isid)
CREATE TABLE #isid(isid INT)
CREATE INDEX isidIndex ON #isid(isid)
DECLARE @SQL NVARCHAR(MAX)
--组合条件
SET @SQL='INSERT INTO #ISID SELECT isid FROM dbo.tb_Article WHERE 1=1 '
IF @Status='已收录' SET @SQL=@SQL+' AND ISNULL(FlagBaiduSnapshot,''N'')=''Y'''
IF @Status='未收录' SET @SQL=@SQL+' AND ISNULL(FlagBaiduSnapshot,''N'')=''N'''
IF ISNULL(@FlagSEO,'N')='Y' SET @SQL=@SQL+' AND ISNULL(FlagSEO,''N'')=''Y'''
EXEC(@SQL);
-------------------------------------------------------------
--计算总页数
DECLARE @TotalPage INT,@TotalRows INT
SELECT @TotalRows=COUNT(*),@TotalPage=COUNT(*)/@PageSize FROM #isid;
IF @TotalRows%@PageSize>0 SELECT @TotalPage=@TotalPage+1;--有余数加一页
--仅返回主键isid的值。注意:必须按同一个字段排列
WITH T AS
(
SELECT isid,ROW_NUMBER() OVER(ORDER BY isid DESC) AS rowNum FROM dbo.tb_Article
WHERE isid IN (SELECT isid FROM #isid)
)
SELECT * INTO #result FROM T WHERE rowNum BETWEEN @StartIndex AND @EndIndex ORDER BY isid DESC
--返回结果
SELECT ArticleID,DATALENGTH(ArticleContent) AS ContentLen,
'http://www.csframework.com/archive/'+ArticleFolder+'/'+ArticleHtmlFile AS URL,
ArticleTitle,FlagSEO,FlagBaiduSnapshot,
@TotalPage AS TotalPage
FROM dbo.tb_Article WHERE isid IN (SELECT isid FROM #result)
END;
//来源:C/S框架网(www.csframework.com) QQ:23404761
@Status NVARCHAR(50), --已收录/未收录/全部
@Title NVARCHAR(50), --文章标题,模糊匹配
@FlagSEO VARCHAR(1), --SEO标识的文章
@PageNo INT,--当前页码,从1开始
@PageSize INT--每页记录数
AS
BEGIN
/*******************************************************
分页查询
SELECT TOP 10 * FROM tb_Article
seo_GetURLs '未收录','','Y',1,10
seo_GetURLs '未收录','','N',1,10
seo_GetURLs '','','Y',1,10
go
seo_GetURLs '','','Y',7,10
********************************************************/
--兼容性检查
IF @PageNo<=0 SET @PageNo=1;
IF @PageSize<=0 SET @PageSize=10;
--计算起始序号和截止序号
DECLARE @StartIndex INT,@EndIndex INT
SELECT @StartIndex=(@PageNo-1)*@PageSize+1;
SELECT @EndIndex=@PageNo*@PageSize;
-------------------------------------------------------------
--临时表(记录主键isid)
CREATE TABLE #isid(isid INT)
CREATE INDEX isidIndex ON #isid(isid)
DECLARE @SQL NVARCHAR(MAX)
--组合条件
SET @SQL='INSERT INTO #ISID SELECT isid FROM dbo.tb_Article WHERE 1=1 '
IF @Status='已收录' SET @SQL=@SQL+' AND ISNULL(FlagBaiduSnapshot,''N'')=''Y'''
IF @Status='未收录' SET @SQL=@SQL+' AND ISNULL(FlagBaiduSnapshot,''N'')=''N'''
IF ISNULL(@FlagSEO,'N')='Y' SET @SQL=@SQL+' AND ISNULL(FlagSEO,''N'')=''Y'''
EXEC(@SQL);
-------------------------------------------------------------
--计算总页数
DECLARE @TotalPage INT,@TotalRows INT
SELECT @TotalRows=COUNT(*),@TotalPage=COUNT(*)/@PageSize FROM #isid;
IF @TotalRows%@PageSize>0 SELECT @TotalPage=@TotalPage+1;--有余数加一页
--仅返回主键isid的值。注意:必须按同一个字段排列
WITH T AS
(
SELECT isid,ROW_NUMBER() OVER(ORDER BY isid DESC) AS rowNum FROM dbo.tb_Article
WHERE isid IN (SELECT isid FROM #isid)
)
SELECT * INTO #result FROM T WHERE rowNum BETWEEN @StartIndex AND @EndIndex ORDER BY isid DESC
--返回结果
SELECT ArticleID,DATALENGTH(ArticleContent) AS ContentLen,
'http://www.csframework.com/archive/'+ArticleFolder+'/'+ArticleHtmlFile AS URL,
ArticleTitle,FlagSEO,FlagBaiduSnapshot,
@TotalPage AS TotalPage
FROM dbo.tb_Article WHERE isid IN (SELECT isid FROM #result)
END;
//来源:C/S框架网(www.csframework.com) QQ:23404761
查询结果:

返回查询表所有字段:
SQL Code:
SET QUOTED_IDENTIFIER ON
SET ANSI_NULLS ON
GO
ALTER PROCEDURE [dbo].[usp_Wallet_GetTransList]
@Account VARCHAR(50),
@D1 DATETIME,--起始时间
@D2 DATETIME,--介绍时间
@DocType INT=0,--1充值,2提现
@OrderID VARCHAR(50)='',--订单编号
@PayType VARCHAR(10)='',--wx, alipay, tt
@State INT=0, --QT:查询类型(0:全部, 1:未入账, 2:已入账)
@PageNo INT=1,--当前页码
@PageSize INT=10--没页记录数
AS
BEGIN
/****************************************************************
程序说明:分页查询交易历史记录
作者:孙中吕
SELECT * FROM tb_Trans ORDER BY CreateTime DESC;
usp_Wallet_GetTransList '1308021008307676AF','1901-01-01','2019-01-01',1,'','',0,1,10
usp_Wallet_GetTransList '1308021008307676AF','1901-01-01','2019-01-01',1,'aa','wx',0,3,5
****************************************************************/
--兼容性检查
IF @PageNo<=0 SET @PageNo=1;
IF @PageSize<=0 SET @PageSize=10;
--计算起始序号和截止序号
DECLARE @StartIndex INT,@EndIndex INT
SELECT @StartIndex=(@PageNo-1)*@PageSize+1;
SELECT @EndIndex=@PageNo*@PageSize;
--临时表
CREATE TABLE #isid(isid INT)
CREATE INDEX isidIndex ON #isid(isid)
DECLARE @SQL VARCHAR(max)
--必选条件
SET @SQL='INSERT INTO #ISID SELECT isid FROM dbo.tb_Trans WHERE Account='''+@Account+''' '
SET @SQL=@SQL+' AND CONVERT(VARCHAR,CreateTime,112) BETWEEN '''+CONVERT(VARCHAR,@D1,112) +''' AND '''+CONVERT(VARCHAR,@D2,112)+''' '
--可选条件
IF @DocType>0 SET @SQL=@SQL+' AND DocType='+CAST(@DocType AS VARCHAR)
IF ISNULL(@OrderID,'')<>'' SET @SQL=@SQL+' AND OrderID='''+@OrderID+''' '
IF ISNULL(@PayType,'')<>'' SET @SQL=@SQL+' AND PayType='''+@PayType+''' '
IF @State>0 SET @SQL=@SQL+' AND State='+CAST(@State AS VARCHAR)
--PRINT @SQL
EXEC(@SQL);
--返回结果,注意:按创建日期倒序排列
WITH T AS
(
SELECT *,ROW_NUMBER() OVER(ORDER BY CreateTime DESC) AS rowNum FROM dbo.tb_Trans
WHERE isid IN (SELECT isid FROM #isid)
)
SELECT * FROM T WHERE rowNum BETWEEN @StartIndex AND @EndIndex ORDER BY CreateTime DESC
--SELECT TOP 100 * FROM dbo.tb_Trans ORDER BY CreateTime DESC
END;
GO
//来源:C/S框架网(www.csframework.com) QQ:23404761
SET QUOTED_IDENTIFIER ON
SET ANSI_NULLS ON
GO
ALTER PROCEDURE [dbo].[usp_Wallet_GetTransList]
@Account VARCHAR(50),
@D1 DATETIME,--起始时间
@D2 DATETIME,--介绍时间
@DocType INT=0,--1充值,2提现
@OrderID VARCHAR(50)='',--订单编号
@PayType VARCHAR(10)='',--wx, alipay, tt
@State INT=0, --QT:查询类型(0:全部, 1:未入账, 2:已入账)
@PageNo INT=1,--当前页码
@PageSize INT=10--没页记录数
AS
BEGIN
/****************************************************************
程序说明:分页查询交易历史记录
作者:孙中吕
SELECT * FROM tb_Trans ORDER BY CreateTime DESC;
usp_Wallet_GetTransList '1308021008307676AF','1901-01-01','2019-01-01',1,'','',0,1,10
usp_Wallet_GetTransList '1308021008307676AF','1901-01-01','2019-01-01',1,'aa','wx',0,3,5
****************************************************************/
--兼容性检查
IF @PageNo<=0 SET @PageNo=1;
IF @PageSize<=0 SET @PageSize=10;
--计算起始序号和截止序号
DECLARE @StartIndex INT,@EndIndex INT
SELECT @StartIndex=(@PageNo-1)*@PageSize+1;
SELECT @EndIndex=@PageNo*@PageSize;
--临时表
CREATE TABLE #isid(isid INT)
CREATE INDEX isidIndex ON #isid(isid)
DECLARE @SQL VARCHAR(max)
--必选条件
SET @SQL='INSERT INTO #ISID SELECT isid FROM dbo.tb_Trans WHERE Account='''+@Account+''' '
SET @SQL=@SQL+' AND CONVERT(VARCHAR,CreateTime,112) BETWEEN '''+CONVERT(VARCHAR,@D1,112) +''' AND '''+CONVERT(VARCHAR,@D2,112)+''' '
--可选条件
IF @DocType>0 SET @SQL=@SQL+' AND DocType='+CAST(@DocType AS VARCHAR)
IF ISNULL(@OrderID,'')<>'' SET @SQL=@SQL+' AND OrderID='''+@OrderID+''' '
IF ISNULL(@PayType,'')<>'' SET @SQL=@SQL+' AND PayType='''+@PayType+''' '
IF @State>0 SET @SQL=@SQL+' AND State='+CAST(@State AS VARCHAR)
--PRINT @SQL
EXEC(@SQL);
--返回结果,注意:按创建日期倒序排列
WITH T AS
(
SELECT *,ROW_NUMBER() OVER(ORDER BY CreateTime DESC) AS rowNum FROM dbo.tb_Trans
WHERE isid IN (SELECT isid FROM #isid)
)
SELECT * FROM T WHERE rowNum BETWEEN @StartIndex AND @EndIndex ORDER BY CreateTime DESC
--SELECT TOP 100 * FROM dbo.tb_Trans ORDER BY CreateTime DESC
END;
GO
//来源:C/S框架网(www.csframework.com) QQ:23404761
参考文档:
C#框架推荐-C/S框架网原创快速开发平台系列产品
TMS-物流运输管理系统《系统详细设计说明书》docx下载(原创文档)
【原创】WCF开发框架 - 采用wsHttpBinding及basicHttpBinding连接https协议的WCF服务
原创C/S架构开源软件 - C#.NET+Winform+Dev+SQL快速开发框架
CSFramework.COM原创:全球国家名称列表国旗图标库导入程序(C#+VS2015)
原创:SQLJOB作业自动备份数据库并自动清除备份历史记录
【原创产品】自己开发MES系统软件,MES开发架构及MES客户端快速开发框架平台
【原创】进销存软件开发模板基于C/S架构快速开发框架C#+Winform+DevExpress
原创:C#源码 GridMovetor按回车自动跳到下一列或自动新增记录(www.csframework.com)
原创:C/S架构快速开发框架通用可配置的数据修改日志解决方案
【原创】WebApi开发框架:Token生成、Token缓存原理、Token验证、令牌机制与原理
【原创】C# Winform Dev自动下拉弹框筛选数据PopupContainerEdit组件
【原创】C# Dev用户自定义组件,自动下拉弹框表格过滤数据组件ucMyLookUpEdit
【原创】C# 深度拷贝对象 使用.NET反射+递归原理实现深度克隆
【原创】简单快速软件开发平台,C/S架构二次开发平台
【原创】C# Winform进销存系统快速开发框架
C#框架推荐-C/S框架网原创快速开发平台系列产品
TMS-物流运输管理系统《系统详细设计说明书》docx下载(原创文档)
【原创】WCF开发框架 - 采用wsHttpBinding及basicHttpBinding连接https协议的WCF服务
原创C/S架构开源软件 - C#.NET+Winform+Dev+SQL快速开发框架
CSFramework.COM原创:全球国家名称列表国旗图标库导入程序(C#+VS2015)
原创:SQLJOB作业自动备份数据库并自动清除备份历史记录
【原创产品】自己开发MES系统软件,MES开发架构及MES客户端快速开发框架平台
【原创】进销存软件开发模板基于C/S架构快速开发框架C#+Winform+DevExpress
原创:C#源码 GridMovetor按回车自动跳到下一列或自动新增记录(www.csframework.com)
原创:C/S架构快速开发框架通用可配置的数据修改日志解决方案
【原创】WebApi开发框架:Token生成、Token缓存原理、Token验证、令牌机制与原理
【原创】C# Winform Dev自动下拉弹框筛选数据PopupContainerEdit组件
【原创】C# Dev用户自定义组件,自动下拉弹框表格过滤数据组件ucMyLookUpEdit
【原创】C# 深度拷贝对象 使用.NET反射+递归原理实现深度克隆
【原创】简单快速软件开发平台,C/S架构二次开发平台
【原创】C# Winform进销存系统快速开发框架
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
在线客服
