创建存储过程:
CREATE PROCEDURE [dbo].[sp_TBTest_Query]
(
@PageSize INT, --每页多少条记录
@PageIndex INT = 1, --指定当前为第几页
@PageCount INT OUTPUT, --返回总页数
@RecordCount INT OUTPUT, --记录总和 @OrderField VARCHAR(5000), --排序字段(多字段,不含Order By)
@strWhere VARCHAR(5000), --条件语句(不用加where) @SumColumnNames NVARCHAR(200), --汇总字段
@SumResult NVARCHAR(200) OUTPUT --返回汇总结果
)
AS
BEGIN
DECLARE @SQL NVARCHAR(MAX) = '';
--条件处理
IF ISNULL(@strWhere, '') =''
BEGIN
SET @strWhere='1=1 '
end --计算总记录数
SET @SQL = N'SELECT @A = count(*) FROM TBTest where '+ @strWhere
EXEC sp_executesql @SQL, N'@A int OUTPUT', @RecordCount OUTPUT; --计算总页数
SELECT @PageCount = CEILING(( @RecordCount + 0.0 ) / @PageSize); --处理页数超出范围情况
IF @PageIndex <= 0
SET @PageIndex = 1; IF @PageIndex > @PageCount
SET @PageIndex = @PageCount; --处理开始点和结束点
DECLARE @StartRecord INT;
DECLARE @EndRecord INT; SET @StartRecord = ( @PageIndex - 1 ) * @PageSize + 1;
SET @EndRecord = @StartRecord + @PageSize - 1; --计算汇总
IF ISNULL(@SumColumnNames, '') <> ''
BEGIN
SET @SQL = N'SELECT @A = (CAST(ISNULL(SUM('
+ REPLACE(@SumColumnNames, ',','), 0) AS NVARCHAR(30)) + '','' + CAST(ISNULL(SUM(')
+ '), 0) AS NVARCHAR(30))) FROM TBTest where '+@strWhere +' '
EXEC sp_executesql @SQL, N'@A NVARCHAR(200) OUTPUT', @SumResult OUTPUT;
END --返回结果
SET @sql=N' SELECT * FROM ( SELECT * ,ROW_NUMBER() OVER(ORDER BY id DESC) AS RowID
FROM TBTest where '+@strWhere +N') t
WHERE RowID BETWEEN '+CONVERT(NVARCHAR(10),@StartRecord)+N' AND '+CONVERT(NVARCHAR(10),@EndRecord)
EXEC sp_executesql @SQL
END
  • 调用代码
     DECLARE    @PageSize INT=10,                        --每页多少条记录
@PageIndex INT = 2, --指定当前为第几页
@PageCount INT , --返回总页数
@RecordCount INT , --记录总和 @OrderField VARCHAR(5000)='ID', --排序字段(多字段,不含Order By)
@strWhere VARCHAR(5000)='', --条件语句(不用加where) @SumColumnNames NVARCHAR(200)='Age', --汇总字段
@SumResult NVARCHAR(200) --返回汇总结果 EXEC sp_TBTest_Query @PageSize,@PageIndex,@PageCount OUTPUT,@RecordCount OUTPUT,@OrderField,@strWhere,@SumColumnNames,@SumResult OUTPUT SELECT @PageCount AS 'PageCount',@RecordCount AS 'RecordCount',@SumResult AS 'SUM'
  • 测试结果

我在项目中遇到一个问题,就是元数据由分组,然后再连接,为了加快查询效率,我不得不剔除传入Where条件字符串中的一个条件,大概写法如下:

DECLARE @strWhere NVARCHAR(max)='ID=1 and Age=2 and address=''销售部'''
DECLARE @str1 NVARCHAR(max)=''
DECLARE @str2 NVARCHAR(max)=''
IF ISNULL(@strWhere, '')<>''
BEGIN
IF( CHARINDEX('Age',@strWhere)>0 )
BEGIN
SET @str1 =SUBSTRING(@strWhere,CHARINDEX('Age',@strWhere),LEN(@strWhere))
if CHARINDEX('and',@str1)>0
begin
SET @str2 =SUBSTRING(@str1,CHARINDEX('and',@str1),LEN(@str1))
end

SET @strWhere=SUBSTRING(@strWhere,0,CHARINDEX('Age',@strWhere))+N' 1=1 '+@str2

end

END

最新文章

  1. 菜单的隐藏&amp;显示
  2. vi全局替换
  3. iOS-打开word、ppt、pdf、execl文档方式
  4. PLSQL_Oracle外部表的概念和使用(案例)
  5. PHP学习之数组的定义和填充
  6. js函数定时器,定时读取系统实时连接数
  7. 你可能不知道的一些JavaScript 奇技淫巧
  8. leetcode Longest Common Prefix python
  9. 从零开始写驱动——vfd专用驱动芯片HT16514并行驱动程序编写
  10. Python学习笔记——基础篇【第六周】——json &amp; pickle &amp; shelve &amp; xml处理模块
  11. 正确使用String,StringBuffer,StringBuilder
  12. 5分钟学习spark streaming 表格和图形化的文档-概览
  13. ad9361自测试校准
  14. docker时间和本地时间不一致的问题
  15. Python3 系列之 可变参数和关键字参数
  16. CentOS 软件安装(yum 和 rpm)
  17. Apache动态加载模块
  18. css布局------块元素水平垂直居中的四种方法
  19. jsp fmt标签格式化double数字
  20. 浅谈Android View事件分发机制

热门文章

  1. Vue-Router 基础入门教程
  2. (转)软件产品化,国内IT人之痛
  3. MySQL是如何实现事务的ACID
  4. openstack vnc 报1006的错误
  5. Java8中list.sort的lamba表达式
  6. RSA加密算法和SSH远程连接服务器
  7. 【Flutter 实战】自定义动画-涟漪和雷达扫描
  8. C#-接口(Interface)详解
  9. 漏洞重温之sql注入(五)
  10. 外链专员怎么做提升自己的seo水平