具体调用实例见代码最后一行注释区域

--if exists(select * from sysobjects where id = object_id(N'page_search') and type = 'P')
--drop PROCEDURE [dbo].[page_search]
--go
CREATE PROCEDURE [dbo].[page_search2](
@strTable varchar(), --要查询的表
@strColumn varchar(), --要查询的字段(*表示全部字段)
@left_join_table varchar(), --多表联查的表名,多个表之间用,隔开
@on_ori nvarchar(), --多表联查的条件,源表@strTable字段
@on_goal nvarchar(), --多表联查的条件,目标表@left_join_table对应字段,多个字段之间用,隔开
@and_search nvarchar(), --搜索条件,多个字段之间用,隔开
@calc varchar(), --运算符
@and_search_value nvarchar(), --搜索条件的值,多个值之间用,隔开
@startindex varchar()=, --起始索引
@perPage varchar() = --每页条数
)
WITH ENCRYPTION
AS
BEGIN SET NOCOUNT ON;
--变量
declare @sqlString nvarchar()=''; --完整的select语句
declare @sql_1 varchar()=''; --sql条件1
declare @sql_2 varchar()=''; --sql条件2 连表查询条件
declare @sql_3 varchar()=''; --sql条件3 搜索条件
declare @sqlString2 nvarchar()=''; --完整的select语句
declare @curr_table int; --表--字符串的当前位置
declare @curr_field int; --字段--字符串的当前位置
declare @curr_search_k int; --表--字符串的当前位置
declare @curr_search_v int; --字段--字符串的当前位置
declare @curr_calc int; --运算符--字符串的当前位置
declare @num1 int; --连表查询表的个数
declare @num2 int; --搜索条件个数
declare @prev1 int; --字段--字符串的当前位置
declare @prev2 int; --字段--字符串的当前位置
declare @prev3 int; --字段--字符串的当前位置
declare @prev4 int; --字段--字符串的当前位置
declare @prev5 int; --字段--字符串的当前位置
declare @res varchar();
declare @rrr varchar();
--变量赋初值
set @num1=(len(@left_join_table)-len(replace(@left_join_table,',','')))+; --print @num1; --
set @num2=(len(@and_search)-len(replace(@and_search,',','')))+; --print @num2; --
set @prev1=;
set @prev2=;
set @prev3=;
set @prev4=;
set @prev5=;
set @sql_1='SELECT rowNum =ROW_NUMBER() over (order by '+@strTable+'.'+@on_ori+'),'+ @strColumn+' FROM ' +@strTable;
--开始循环处理--处理连表查询部分
while ( @num1 > )
begin
set @curr_table=charindex(',',@left_join_table,@prev1); --print @curr_table --
set @curr_field= charindex(',',@on_goal,@prev2); --print @curr_field -- if @num1>
begin
set @sql_2 =' left join '+substring(@left_join_table,@prev1,@curr_table-@prev1)+' on '+@strTable+'.'+@on_ori+'='+substring(@left_join_table,@prev1,@curr_table-@prev1)+'.'+substring(@on_goal,@prev2,@curr_field-@prev2)+''+@sql_2;
end
else--最后一个
begin
set @sql_2 =@sql_2 + ' left join '+substring(@left_join_table,@prev1,len(@left_join_table)-@prev1+)+' on '+@strTable+'.'+@on_ori+'='+substring(@left_join_table,@prev1,len(@left_join_table)-@prev1+)+'.'+substring(@on_goal,@prev2,len(@on_goal)-@prev2+);
break;
end
set @num1=@num1-;
set @prev1=@curr_table+;
set @prev2=@curr_field+;
end
--开始循环处理--处理搜索条件部分
while ( @num2 > )
begin
set @curr_search_k= charindex(',',@and_search,@prev3);
--print @curr_search_k --
set @curr_search_v= charindex(',',@and_search_value,@prev4);
--print @curr_search_v --
set @curr_calc= charindex(',',@calc,@prev5);
--print @curr_search_v --
if @num2>
begin
set @res=substring(@calc,@prev5,@curr_calc-@prev5);
set @rrr=substring(@and_search_value,@prev4,@curr_search_v-@prev4);
print @rrr
if ( @res = 'LIKE' )
set @sql_3 = ' and ('+substring(@and_search_value,@prev4,@curr_search_v-@prev4)+' IS NULL OR '+substring(@and_search,@prev3,@curr_search_k-@prev3)+' LIKE '+@rrr+')'+''+@sql_3;
else
set @sql_3 = ' and ('+substring(@and_search_value,@prev4,@curr_search_v-@prev4)+' IS NULL OR '+substring(@and_search,@prev3,@curr_search_k-@prev3)+' '+substring(@calc,@prev5,@curr_calc-@prev5)+' '+substring(@and_search_value,@prev4,@curr_search_v-@prev4)+')'+''+@sql_3;
end
else--最后一个
begin
set @res=substring(@calc,@prev5,len(@calc)-@prev5+);
set @rrr=substring(@and_search_value,@prev4,len(@and_search_value)-@prev4+);
if ( @res = 'LIKE' )
begin
set @sql_3 =@sql_3 + ' and ('+substring(@and_search_value,@prev4,len(@and_search_value)-@prev4+)+' IS NULL OR '+substring(@and_search,@prev3,len(@and_search)-@prev3+)+' LIKE '+@rrr+')';
break;
end
else
begin
set @sql_3 =@sql_3 + ' and ('+substring(@and_search_value,@prev4,len(@and_search_value)-@prev4+)+' IS NULL OR '+substring(@and_search,@prev3,len(@and_search)-@prev3+)+' '+substring(@calc,@prev5,len(@calc)-@prev5+)+' '+substring(@and_search_value,@prev4,len(@and_search_value)-@prev4+)+')';
break;
end
end
set @num2=@num2-;
set @prev3=@curr_search_k+;
set @prev4=@curr_search_v+;
set @prev5=@curr_calc+;
end
set @sqlString=@sql_1+@sql_2+' where 1=1 '+@sql_3
set @sqlString2='select top('+@perPage+') rowNum,totalNum = (select count(0) from ('+@sqlString+') as cte),pageCount=ceiling((((select count(0) from ('+@sqlString+') as cte )+0.0))/CAST('+@perPage+' as varchar)),'+@strColumn+' from ('+@sqlString+') as cte where rowNum > '+@startindex+' order by rowNum ASC';
PRINT @sqlString
exec(@sqlString2)
END --execute [dbo].[page_search2] "base._Member",'AcctNbr,AcctName,ssn,Since,DiffEligible,DiffCardOn,CurrSelfRank','base._MemberProfile,tree._Node,tree._Leaf','ID','ID,MemberID,MemberID','AcctNbr,AcctName,SSN,CurrSelfRank,Since,Since',"=,LIKE,=,=,>,<","null,'zouke%',null,null,null,null","",""
if exists(select * from sysobjects where id = object_id(N'page_search') and type = 'P')
drop PROCEDURE [dbo].[page_search]
go
CREATE PROCEDURE [dbo].[page_search](
@startindex int=,
@perPage int = ,
@acctNbr varchar()=null,
@user_name nvarchar()=null,
@ssn varchar()=null,
@rank varchar()=null,
@from_since varchar()=null,
@to_since varchar()=null
)
WITH ENCRYPTION
AS
BEGIN SET NOCOUNT ON; with cte as(
select
rowNum = ROW_NUMBER() over (order by base._Member.ID),
AcctNbr,
AcctName,
ssn,
tree._Leaf.CountryID,
Since,
DiffEligible,
DiffCardOn,
CurrSelfRank
from base._Member
left join base._MemberProfile on base._Member.ID=base._MemberProfile.ID
left join tree._Node on base._Member.ID= tree._Node.MemberID
left join tree._Leaf on base._Member.ID= tree._Leaf.MemberID
where =
and (@acctNbr IS NULL OR AcctNbr = @acctNbr)
--and (@user_name IS NULL OR AcctName = @user_name)
and (@user_name IS NULL OR AcctName LIKE @user_name + '%')
and (@ssn IS NULL OR SSN = @ssn)
and (@rank IS NULL OR CurrSelfRank = @rank)
and (@from_since IS NULL OR Since > @from_since)
and (@to_since IS NULL OR Since < @to_since)
)
select top(@perPage)
rowNum,
totalNum = (select count() from cte),
pageCount=ceiling((((select count() from cte)+0.0))/CAST(@perPage as varchar)),
AcctNbr,
AcctName,
ssn,
CountryID,
Since,DiffEligible,
DiffCardOn,
CurrSelfRank
from cte
where rowNum > @startindex
order by rowNum ASC
END
--execute [dbo].[GetMemberInfo3] ,,null,null,null,null,'2012-05-16','2013-05-16'

sqlserver 存储过程 分页搜索查询的更多相关文章

  1. sqlserver 存储过程分页管理

    -- =============================================-- Author:  <Author:刘畅>-- Create date: <Cre ...

  2. SqlServer 存储过程分页

    适用于2005以上版本 create procedure [dbo].[SP_GetPageList] ( @columns nvarchar(max), --查询字段 @tablename nvar ...

  3. sqlserver存储过程分页

    create  procedure [dbo].[SqlPager]@sqlstr nvarchar(4000), --查询字符串@currentpage int, --第N页@pagesize in ...

  4. 分页搜索查询sql

    select * from (select t.*,rownum no from " + table + " t where scbj=0)where (no>(" ...

  5. sqlserver存储过程分页记录

    USE [HK_ERP]GO/****** Object: StoredProcedure [dbo].[GetPageBillsByShopID] Script Date: 2018/10/30 1 ...

  6. SqlServer分页存储过程(多表查询,多条件排序),Repeater控件呈现数据以及分页

        存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出 ...

  7. SqlServer存储过程应用二:分页查询数据并动态拼接where条件

    前言 开发中查询功能是贯穿全文的,我们来盘一盘使用存储过程分页查询,并且支持动态拼接where条件. 划重点:支持动态拼接where条件 对存储过程的使用有疑问的同学去[SqlServer存储过程的创 ...

  8. Sqlserver数据库分页查询

    Sqlserver数据库分页查询一直是Sqlserver的短板,闲来无事,想出几种方法,假设有表ARTICLE,字段ID.YEAR...(其他省略),数据53210条(客户真实数据,量不大),分页查询 ...

  9. Oracle、MySql、SQLServer数据分页查询

    看过此博文后Oracle.MySql.SQLServer 数据分页查询,在根据公司的RegionRes表格做出了 SQLserver的分页查询语句: 别名.字段 FROM( SELECT row_nu ...

随机推荐

  1. eclipse项目中丢失的R包找回方法

    当我们项目中的R文件丢失的时候会令我们痛苦不已,怎样找回呢?总不能删了吧,那样心血会毁于一旦的,我们肯定不会那样做,那要怎么办呢?我这里提供三种方法: ​一,一般情况下这样: ​    ​方法一:选中 ...

  2. 抛弃JQ,回归原生js……

    之前我写过一篇文章叫做<jq不会被淘汰>--而事实上它真的不会被淘汰,因为即使在mvvm框架盛行的今天,原生js的api越来越友好的今天,jq依然在用户量上是霸主-- 但是今天我们要讨论的 ...

  3. 微信小程序的网络设置,及网络请求:wx.request(OBJECT)

    Md2All 一个Markdown在线转换工具 网址:http://md.aclickall.com 微信公众号:颜家大少本文所用排版工具:http://md.aclickall.com 支持通用的M ...

  4. 如何有效的去使用一款免费的ERP

    现在市场上免费的软件不少,怎么样去使用一款免费产品是很多人比较头疼的事情. 一般使用免费ERP软件的基本都是小企业,没用过想用又舍不得花钱.如果企业有懂数据库这块儿的管理员,那都还好.如果没有,那建议 ...

  5. CM5(5.11.0)和CDH5(5.11.0)离线安装

    概述 文件下载 系统环境搭建 日志查看 Q&A 参考 概述 CDH (Cloudera's Distribution, including Apache Hadoop),是Hadoop众多分支 ...

  6. JS弹窗带遮蔽的功能

    很不错的JS原生自定义弹窗,很实用! function myAlert(str,click,useCancel){ var overflow=""; var $hidder=nul ...

  7. 浅谈canvas绘画王者荣耀--雷达图

    背景: 一日晚上下班的我静静的靠在角落上听着歌,这时"滴!滴!"手机上传来一阵qq消息.原来我人在问王者荣耀的雷达图在页面上如何做出来的,有人回答用canvas绘画.那么问题来了, ...

  8. javascript面向对象系列第四篇——OOP中的常见概念

    前面的话 面向对象描述了一种代码的组织结构形式——一种在软件中对真实世界中问题领域的建模方法.本文将从理论层面,介绍javascript面向对象程序程序(OOP)中一些常见的概念 对象 所谓对象,本质 ...

  9. Asp.Net下,基于Jquery的Ajax二级联动

    最近做一个项目,要求实现二级联动效果.背景为:通过学院的选择,联动出专业选项.起初想直接用微软的控件实现Ajax效果,但是DropDownList控件会自动触发PostBack,在后台根本就不好控制, ...

  10. 》》HTML5 移动页面自适应手机屏幕四类方法

    1.使用meta标签:viewport H5移动端页面自适应普遍使用的方法,理论上讲使用这个标签是可以适应所有尺寸的屏幕的,但是各设备对该标签的解释方式及支持程度不同造成了不能兼容所有浏览器或系统. ...