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

--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. Oracle函数sys_connect_by_path 详解

    Oracle函数sys_connect_by_path 详解 语法:Oracle函数:sys_connect_by_path 主要用于树查询(层次查询) 以及 多列转行.其语法一般为:       s ...

  2. canvas三环加载进度条

    之前做了一个三个圆形叠加在一起的加载,用的是定位和cile来操作,但是加载的头部不能是圆形.后来用canvas做了一个,但是这个加载的进度不好调整,原理很简单,就是让一个圆,按照圆形轨迹进行运动就可以 ...

  3. python3学习笔记(3)

    一.内置函数补充1.callable()检测传递的参数是否可以被调用.def f1() pass可以被调用f2 = 123不可以被调用2.chr()和ord()chr()将ascii码转换成字符,or ...

  4. 常用接口简析1---IEnumerable、IEnumerator简析

    常用接口的解析(链接) 1.IEnumerable深入解析 2.IComparable.IComparable接口解析 3.IList.IList接口解析      引言: IEnumerable和I ...

  5. C#设计模式之十七观察者模式(Observer Pattern)【行为型】

    一.引言   今天是2017年11月份的最后一天,也就是2017年11月30日,利用今天再写一个模式,争取下个月(也就是12月份)把所有的模式写完,2018年,新的一年写一些新的东西.今天我们开始讲& ...

  6. iBatis & myBatis & Hibernate 要点记录

    iBatis & myBatis & Hibernate 要点记录 这三个是当前常用三大持久层框架,对其各自要点简要记录,并对其异同点进行简单比较. 1. iBatis iBatis主 ...

  7. A workaround to change shared memory size for Docker containers in AWS ECS

    Issue Because of not supporting to specify the following docker run parameter, containers in ECS can ...

  8. 【前端开发】--js弹框

    js三种弹框 一.普通弹框 这类弹框就是仅仅是个提示作用,并不会做其它操作 关键词:alert()    这个没啥好说的,就是一个弹框.  二.判断弹框     这类框有一个判断作用 关键字:conf ...

  9. codeforces 630C - Lucky Numbers 递推思路

    630C - Lucky Numbers 题目大意: 给定数字位数,且这个数字只能由7和8组成,问有多少种组合的可能性 思路: 假设为1位,只有7和8:两位的时候,除了77,78,87,88之外还哇哦 ...

  10. svn搭建文档

    1.制作本地yum源 a)挂载光盘 [root@localhost ~]# mount  /dev/cdrom  /mnt b)删除/etc/yum.repos.d目录所有的repo文件 [root@ ...